Utólag létrehozott getter nem adja ki a privát változót
Sziasztok!
Érdekes jelenségre bukkantam, és szeretnék belőle tanulni (de sajnos megakadtam).
Kezdjük a kóddal, ami egyszerű:Vagyis: a get2 esetében látszólag helyes a futási környezet, mert a "this" működik. Viszont a privát változót nem éri el. Ez miért van így? Meg lehetne valahogy csinálni, hogy az utólag létrehozott függvény olvassa a privát változót is? (Ezek szerint különbözik a "this" érvényessége és a scope működése? Ez miért jó?)
(Próbáltam mindenhogy, sehogyan sem ment...)
Köszi!
■ Érdekes jelenségre bukkantam, és szeretnék belőle tanulni (de sajnos megakadtam).
Kezdjük a kóddal, ami egyszerű:
<html>
<head>
<title>teszt</title>
<script type="text/javascript">
kk=new function()
{
this.alma=55;
var korte="körte";
this.get=function(a)
{
return eval(a);
}
}
alert(kk.get("this.alma")); //55
alert(kk.get("korte")); //körte
kk.get2=function(a)
{
return eval(a);
}
alert(kk.get2("this.alma")); //55
alert(kk.get2("korte")); //hiba!!! nincs definiálva!?
</script>
</head>
<body>
</body>
</html>
(Próbáltam mindenhogy, sehogyan sem ment...)
Köszi!
Szerintem...
Majd egyszer jobban utánanézek ennek, és írok róla egy cikket. Love metaprograming :-)
Closure magyarul
Akkor legyen Closure :)
Visszatérve a témára, utánanéztem, és igazam van, a Closurat később nem lehet szimulálni :)
Viszont ez egyben elég memóriaigényes dolog is, mert minden var -nál új foglalás történik példányosítás alatt a memóriában.
Ha már nagyon privát metódus akarsz javaslom a
this.___jajjdeprivatvagyok="Privát Vagyok";
eljárást, ami
"private methods using naming conventions"
néven fut az angol szakirodalomban.
Ha javascript ojjektum-orientált programozással akarsz foglalkozni, először szerintem felejts el mindent, amit az ojjektum orientált programnyelvekről feltételezel :-) Egyébként szerintem nagyon nagyon jó kis nyelv, és nagyon trükkös dolgokat el lehet vele írni. Love metaprogramozás :)
köszi
Köszi a válaszokat, ha van valakinek ötlete, szívesen veszem.
scope, this stb
üvd Csaba
Ez jó!
Az eval-t minden szakirodalom elkerülendőnek jelzi...én még sosem használtam, van ennek valóságalapja?
Tévedtem....
eval
The eval function also compromises the security of your application because it grants too much authority to the eval'd text. And it compromises the performance of the language as a whole in the same way that the with statement does.
Publisher: O'Reilly
Pub Date: May 2, 2008
Print ISBN-13: 978-0-596-51774-8
JSON parse-oláson kívül másra nem szoktam használni, lehet vele még töréspontot rakni a kódba:
üdv Csaba
ha van eval, minden van
nem
üdv Csaba
mindegy
A "var" lokális változók használata vagy haszna (hogy hogyan "illik" használni) az pont a closure lehetősége miatt ellentmondásos: a closure lehet egy hasznos eszköz, de utólag nem bővíthető tetszőlegesen egy objektum, csak akkor ha már a konstrukciós fázisban erre felkészítettük. Ez azért egy jelentős korlát. (tekintve, hogy a javascript egyébként nagyon "szabad" környezetet ad, kár hogy ez nem lehetséges)
Egyébként köszi, jók a linkek is, most olvasgatom...