Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 13. 2. 2015, 11:09:11
Potřeboval bych zjistit, jestli je možné bez nějakých potíží volat metodu pomocí proměnné uvnitř deklarace jiné metody.
Tedy něco jako: this[property_name] = "something";
Celé by to mělo vypadat zjednodušeně nějak takto: function object_def() { this.property_a = 1; this.method_a = method_a_def; this.method_b = method_b_def; } method_a_def(){ var porperty_name = "property_a"; var method_name = "method_b"; this[porperty_name] = 2; this[method_name](); } |
||
juriad Profil |
Ano. Pro názvy, které jsou platnými identifikátory (což property_a je) jsou následující výrazy shodné:
this["property_a"] this.property_a Jestli je jejich datový typ číselná proměnná či funkce, je jedno. Viz též Dvojí přístup ke členu objektu. |
||
Chamurappi Profil |
#3 · Zasláno: 13. 2. 2015, 11:30:20
Reaguji na quatzaela:
Je to možné a celkem normální. Jen je dobré být v tamto konzistentní a oba způsoby v rámci jednoho skriptu nemíchat, protože když se na skript pustí třeba nejagresivnější mačkací funkce Google Closure Compileru, do přístupu přes řetězce nezasahuje, zatímco přístup přes tečku nahrazuje za něco nesrozumitelného. |
||
quatzael Profil |
#4 · Zasláno: 13. 2. 2015, 11:32:08 · Upravil/a: quatzael
juriad:
Ok, díky za odpověď, ale nejsem si jistý, jestli si správně rozumíme. Já potřebuju volat metodu/vlastnost pomocí názvu, který mám uložený v proměnné. Tzn.: var porperty_name = "property_a"; this[porperty_name] = 2; Ty tam máš ty uvozovky, to potom není proměnná.. Chamurappi: „nejagresivnější mačkací funkce Google Closure Compileru, do přístupu přes řetězce nezasahuje, zatímco přístup přes tečku nahrazuje za něco nesrozumitelného.“ No tak compilovat to možná nakonec budu, ale spíš jen na ty mezery a komentáře, tak to snad nebude problém.. |
||
juriad Profil |
#5 · Zasláno: 13. 2. 2015, 12:31:22
quatzael:
Mezi tím není rozdíl. Indexem může být cokoli, co se na string vyhodnotí. Projde třeba i: var property_base = "property"; var property_name = "a" this[porperty_base + "_" + property_name] = 2; Přesněji viz: http://www.ecma-international.org/ecma-262/5.1/#sec-11.2.1 |
||
quatzael Profil |
#6 · Zasláno: 13. 2. 2015, 12:59:42
juriad:
Ok. Jen jsem se radši ptal pro upřesnění. Díky. |
||
1Pupik1989 Profil |
#7 · Zasláno: 13. 2. 2015, 22:32:23
Problém nastane, když jí nebudeš volat rovnou, ale uložíš si jí do proměnné.
var property = 'property_name'; var method = thid[property]; method(something); //Tady uvnitř funkce se bude nacházet v this objekt Window To je jen takové doplnění. |
||
Časová prodleva: 10 let
|
0