Не хотите использовать eval при создании экземпляра объекта из String - помогите? - PullRequest
1 голос
/ 20 июня 2011

У меня есть следующий устаревший код, из которого я хотел бы удалить eval:

eval('view = new ' + o.base + '(o)');

Лучшее, что я до сих пор придумал, это ...

view = eval(o.base).prototype.constructor.apply(o)

... который, очевидно, все еще использует eval. Может кто-нибудь помочь, пожалуйста?

ПРИМЕЧАНИЕ. Переменная o.base является полным именем класса (например, «application.area.type.ClassName»), ссылающимся на допустимую функцию.

1 Ответ

3 голосов
/ 20 июня 2011
view = application.area.type[o.base].prototype.constructor.apply(o);

Но вы все еще можете использовать new:

view = new application.area.type[o.base](o);

UPDATE

Более общий способ достижения этого для o.base, представляющего любое квалифицированное имя, будет:

var base = window;
for(var i=0,ns=o.base.split('.'); i<ns.length; ++i) {
   base = base[ns[i]];
}
view = new base(o);
...