ugrás a tartalomhoz

JS:függvényt hívó objektum meghatározása

Anonymous · 2006. Aug. 3. (Cs), 15.45
Sziasztok!
Van valakinek ötlete, hogy meg lehet-e állapítani egy függvényben/objektumban, hogy ki volt a meghívója (valami call order-ben az előző objektum kéne)
PL:
<html>
<head>
<title>hopp</title>
<script type="text/javascript">

function ac()
{
this.id="ao";
this.cd=function()
{
alert(ao.cd.caller);
}

}

ao=new ac();

function bc()
{
this.id="bo";
this.hivd=function()
{
ao.cd();
}
}

bo=new bc();

function hivo()
{
bo.hivd();
}

hivo();

</script>

</head>
<body>
</body>
</html>

Az "alert(ao.cd.caller);"-rel ki lehet alertezni a hívó függvényt, de ennél tovább nem jutottam; kéne, hogy ez a fv melyik objektumban van, vagyis referencia a "bo" objektumra. valami ilyesmi nincsen véletlenül, hogy: ao.cd.caller.parentObj ???
Köszi!
 
1

Mihez kell? this para?

Jano · 2006. Aug. 3. (Cs), 16.26
Véletlenül nem azért kell neked ez, mert a belső függvény később hívódik meg és a this nem működik?
2

a this nem működik

Anonymous · 2006. Aug. 3. (Cs), 16.38
Nem, a "this" az aktuális objektumra mutat, az "ao"-ra. Ha átadnám a this-t, akkor persze meglenne és így is fogom csinálni, ha más megoldás nincs. De érthetetlen, hogy a JS miért nem ad lehetőséget a hívó objektum elérésére (ráadásul a hívó függvény elérésére van lehetőség). Reménykedem, hogy a hívó objektum elérhető valahogy a this-jének átadása nélkül is.
3

persze

toxin · 2006. Aug. 3. (Cs), 16.50
átállítod context objektumot

function ac()
{
    this.id="ao";
    this.cd=function()
    {
        alert(this.id);
    }

}

ao=new ac();

function bc()
{
    this.id="bo";
    this.hivd=function()
    {
        ao.cd.call(this);
    }
}
:)
4

igen ezt ismertem

Anonymous · 2006. Aug. 3. (Cs), 17.08
Köszi, igen ezt ismerem, de végülis mindegy, hogy a this-t paraméterként adom át, vagy a call-t használom (akkor már inkább átadom a thist)
Olyan megoldás érdekelne, amiben minden előkészület nélkül meghatározhatom a hívó objektumot --- ahogy a hívó függvényt is (a "caller"-rel)
A JS úgyis nyilvántartja, hogy ki a hívó objektum (hiszen oda tér vissza), miért kéne trükköznöm, hogy megtudjam?
5

ok

toxin · 2006. Aug. 3. (Cs), 17.11
tudom hogy nem megoldás, nézem én is a js oo manuált szólok ha van valami :)
6

1000 köszi

Anonymous · 2006. Aug. 3. (Cs), 17.29
Köszi! Ezzel fejleszthetnék egy kicsit a JS programozási technikámon. Sok helyen szépítene a kódon.
7

no

toxin · 2006. Aug. 3. (Cs), 17.41
szvsz semmi, js 1.7-ben nem lesz ilyen, 2.0-át csak átfutottam :) de ott se leltem, mindenol megy a this referenciának

ha meg szép js kódot akarsz, térj át prototype kódbázisra ;)

(és lesznek ilyen sexy class-aid mint nekem http://weblabor.hu/forumok/temak/14445#comment-31597
http://weblabor.hu/blog/20060524/ajax-fejlesztes#comment-28201
:))) )
8

szomorú

Anonymous · 2006. Aug. 3. (Cs), 17.50
Érthetetlen...
Na mindegy.
Köszi a segítséget!
...
Á, megvan! A 3.27-ben fog megjelenni és az lesz a neve, hogy parentVercingeTorix, esetünkben egyszerűen this.parentVercingeTorix vagy ao.cd.caller.vercingeTorix. Már csak 3 évet kell várnom, megkönnyebbültem...
9

tényleg, és ilyen van?

Anonymous · 2006. Aug. 3. (Cs), 18.09
Mondjuk van egy objektum, amiben definiálok egy objektumot, és abban is egyet. akkor kb ilyen lesz:
a.b.c
mindegyiknek van id tulajdonsága, pl. a.b.id="alma" a.id="aidé"
ha a c egyik függvényében vagyok, az id-je elérhető: this.id vagy c.id
A "b" id-je elérhető valahogy anélkül, hogy megnevezném a b-t? pl. this.parent.id?
...vagy az "a" id-je: c.parent.parent.id
Van valami ilyesmi?
(dom-ban van parentNode, de nem dom objektumra gondolok, és nem akarom előredefiniálni a "parent" tulajdonságot -- sem utódefiniálni persze)
Köszi...
10

hát részemről

toxin · 2006. Aug. 3. (Cs), 18.32
annyit tudok segíteni hogy
http://htmlinfo.polyhistor.hu/js13guide/contents.htm 7-8 fejezet,

én maradok prototype kódbázisos megoldásnál, ahhoz nem kell 4-5 kávé kódolás előtt :)
http://encytemedia.com/blog/articles/2006/05/23/prototype-inheritance-madness


ui: jajj én már elértem az 5-ös szintet http://dean.edwards.name/weblog/2006/06/levels/ :)))