Autor | Zpráva | ||
---|---|---|---|
waltz Profil * |
#1 · Zasláno: 12. 6. 2013, 11:53:50
Zdravim,
rad by som poprosil znalejsich kolegov o pomoc. V nasledujucom kode sa snazim na objekte dynamicky volat metodu (nazov podla parametra) a tym zmenit hodnotu vlastnosti. V podstate sa dana metoda dynamicky zavola, ale dostane pracuje s vlastnostou, ktora je 'undefined'. Vid. kod: <!-- To change this template, choose Tools | Templates and open the template in the editor. --> <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script> function main() { var F = function() { this.n = 0; }; F.prototype = { get : function() { return this.n; }, set : function(n) { alert("this.n = " + this.n); this.n = n; } }; F['prototype']['getProp'] = function(prop) { return this[prop]; }; // vytvor objekt var f = new F(); f.set(111); // klasicke volanie (f.getProp("set"))(222); // dynamicke volanie alert("res: " + f.get()); // hodnota nezmenena } </script> </head> <body onload="main();"> </body> </html> |
||
pako Profil * |
#2 · Zasláno: 12. 6. 2013, 13:54:16
mozes pouzit uzaver -
f.getProp(property) ti vrati funkciu, ktora bude vediet co ma spravit s tym dalsim argumentom (vo vnorenych funkciach je this rovne window /undefined , preto je treba pouzit dalsiu premennu that :
F['prototype']['getProp'] = function(prop) { var that = this; return function(num) { return that[prop](num);}; }; (function(num) {return f.set(num);})(222); alebo moze uplne zmenit funkciu getProp
F['prototype']['getProp'] = function(prop,value) { return this[prop](value); }; f.getProp(property,value); |
||
waltz Profil * |
#3 · Zasláno: 12. 6. 2013, 14:18:04
dakujem,...v podstate som sa znazil ist takou cestou,..ale nie je mi jasne preco nestaci
return this[prop]; .
..co ak do prop nepredavam fuknciu ?? ..ale len vlastnost, napr 'n' (t.z. premennu): f.getProp("n"); -> v tomto pripade sa mi nevrati hodnota, ale funkcia (co je v podstate nezelane);
..prikladom nechcem nic konkretne riesit, len skusam moznosti.. O uzaveroch mam uz celkom dost precitane,..aj o prototype; ale obcas ma JS prekvapi...trochu sa v tom zacinam stracat :/ |
||
pako Profil * |
#4 · Zasláno: 12. 6. 2013, 16:36:13
return this[prop] ti vrati len hodnotu tej vlastnosti
mohol by si pouzit takuto konstrukciu: if (typeof this[prop] === 'function') { return this[prop](); } else { return this[prop]; } |
||
1Pupik1989 Profil |
#5 · Zasláno: 12. 6. 2013, 16:40:27
return this[prop]; nestačí, protože se nevrátí metoda objektu, nýbrž samotná funkce. A pokud funkce není volána jako funkce.call(nejakyObjekt,parametr) nebo funkce.apply(nejakyObjekt,pole_prametru) , tak je v this objekt window jako její rodič.
Pokud byste chtěl zavolat tu metodu v objektu F, tak by to vypadlo asi takto f.getProp("set").call(f,222) , což není moc hezké. Ideální řešení je to od uživatele pako.
|
||
_es Profil |
#6 · Zasláno: 12. 6. 2013, 17:59:55
waltz:
Viď aj Co znamená a jak se používá v JavaScriptu this?. |
||
waltz Profil * |
#7 · Zasláno: 12. 6. 2013, 20:02:19
..vdaka za odpovede..nastudujem trocha viac..
|
||
Časová prodleva: 11 let
|
0