Autor Zpráva
quatzael
Profil
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
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
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
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
juriad:
Ok. Jen jsem se radši ptal pro upřesnění.
Díky.
1Pupik1989
Profil
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í.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: