动态构建对象并注入变量

时间:2011-09-13 11:55:39

标签: javascript

我正在编写一个应该执行的JavaScript方法:

  1. 创建一个已作为第一个参数传递的类型的对象
  2. 将变量放入该新对象中
  3. 调用该对象的方法__construct并将传递给它的参数传递给此方法(第一个除外)。
  4. 使用示例:

    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仍未定义。

1 个答案:

答案 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是一个很好的变量名。