Имя: Пароль:
IT
Веб-мастеринг
JS: Как избавиться от нехорошего eval в цикле?
0 D_Pavel
 
30.08.16
19:41
Перебираются все свойства одного объекта и если тип свойства - функция, то эта функция записывается в функцию другого объекта, например:
t.moyaFunkciya = function(){
    o.moyaFunkciya.apply(o, arguments);
};

вот код который нужно исправить:

    for(var i in o){
        if(typeof o[i] == 'function'){
            eval("t."+i+" = function(){o."+i+".apply(o, arguments);};");
        }
    }


Как избавиться от eval в данном цикле?
1 Лефмихалыч
 
30.08.16
19:59
а что мешает использовать t[i] и o[i]?
2 D_Pavel
 
30.08.16
20:01
Малость упростил для понимания, но все равно eval остался:

for(var i in o){
    t[i] = function () {
        eval("o." + i + ".apply(o, arguments);");
    };
}
3 Лефмихалыч
 
30.08.16
20:04
так что мешает-то? с t получилось, значит и с o тоже должно
4 D_Pavel
 
30.08.16
20:05
(1) (3) то что переменная i после выхода из цикла будет не правильная. И для всех функция одна и та же.
5 Лефмихалыч
 
30.08.16
20:11
а, пля, это же жабаскрипт...
6 D_Pavel
 
30.08.16
20:21
(5) а ты про что подумал?
7 Неверный Параметр И
 
30.08.16
20:23
Фабричной функцией. Которая вернет нужную функцию, построенную в своем отдельном контексте.

Что, на stackoverflow не подсказали еще?
8 D_Pavel
 
30.08.16
20:25
(7) а что, должны были?
Спасибо, темку можно грохнуть.
9 Мэс33
 
30.08.16
22:57
>>>moyaFunkciya
Мои глаза, хнык хнык.
10 D_Pavel
 
31.08.16
06:02
(9) Ты еще не видел как я переменные назову.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший