我正在编写一个应该执行的JavaScript方法:
使用示例:
this.create('Foo', 'bar', 42);
应该这样做:
var O = new Foo;
Foo.Application = this;
Foo.__construct('bar', 42);
我现在拥有的:
Application.prototype.create = function(sType)
{
var Self = this;
eval('var Object = new ' + sType + ';');
// what to write here?
var aParameters = Array.prototype.slice.call(arguments, 1);
Object.__construct.apply(aParameters);
}
我尝试使用以下代码将Application var注入新对象:
Object.Application = this;
或:
var Self = this;
$.extend(Object, { Application: eval(Self) });
但是在__construct方法中,this.Application仍未定义。
答案 0 :(得分:1)
你做了明智的事情并改变API以接受构造函数而不是字符串。
app.create(Foo, args, moreargs);
Application.prototype.create = function _create(klass) {
var o = new klass();
o.Application = this;
o.__construct.apply(o, Array.prototype.slice.call(arguments, 1));
};
您的代码被破坏的原因是因为您的a)使用eval
。不要那样做。
你知道,当我们有一个名为Object
的全局对象构造函数时,Object
是一个很好的变量名。