potrebujem objektu vytvorit mnozstvo metod, ktore budu vsetky robit "to iste", napriklad:
o = {};
o.metoda1 = function(parameter) { if (typeof this._metoda1 == 'function') this._metoda1(parameter) };
o.metoda2 = function(parameter) { if (typeof this._metoda2 == 'function') this._metoda2(parameter) };
...
rucne vypisovat to nechcem tak som na to siel takto:
var mtds = ['metoda1','metoda2','metoda3'];
for(var i=0;i<mtds.length;i++)
{
var method = '_' + mtds[i];
o[mtds[i]] = function(param)
{
if (typeof this[method] == 'function') this[method](param);
}
}
Takto to ale nefunguje, lebo potom, pri volani sa stale pouzije posledny method zo slucky.
(vsetky volania o.method1(), o.method2(), o.method3() volaju o._method3())
...tak som to hodil do funkcie, ktorej ten method predavam a ta fciu vytvory. Takto to funguje:
o.vytvor = function(method)
{
return function(param)
{
if (typeof this[method] == 'function') this[method](param);
}
}
for(var i=0;i<mtds.length;i++)
{
var method = '_' + mtds[i];
o[mtds[i]] = o.vytvor(method);
}
delete o.vytvor; // uz nieje potrebna
1. Chcem sa opytat, ci niekto nepozna riesenie bez tej pomocnej fcie, alebo ine, jednoduchsie
2. Dalsia otazka, iba ciste teoreticka, keby som chcel predavat neobmedzeny pocet parametrov ( o.method1('a',b','c') zavola o._method1('a','b','c') ) -- ci na to existuje nejaka jednoducha cesta, ina ako
eval('this[method]('+ ...spracovane arguments[] do stringu... +')');