代码之家  ›  专栏  ›  技术社区  ›  wheresrhys

附加到错误对象的属性

  •  1
  • wheresrhys  · 技术社区  · 14 年前

    我已经修改了crockford object()函数,这样我就可以传入一些参数,并在新对象中自动运行init函数:

    function object(o) {
        function F() {}
        F.prototype = o;
        var params = Array.prototype.slice.call(arguments,1);
        var obj = new F();
        if(params.length) {
         obj.init.apply(obj,params);
        }
        return obj;
    }
    

    这在大多数情况下都很好,但是在一个对象中,我有如下定义的函数:

    MY.Object = function() {
    
     function init(element, generator) {
      build(element);
                    // more code after
     }
    
     function build(element) {
      this._property = "example";
     }
         return {
            init: init;
         }
    }();
    

    如果我跑

    My.Object2 = object(MY.Object, "test param");
    

    出于某种原因,属性被添加到Windows对象中。如果我生成一个公共方法并使用this.build()调用它,则此操作将停止。

    有人能解释为什么会这样吗?

    1 回复  |  直到 9 年前
        1
  •  2
  •   palswim    14 年前

    build this window

    build.call(this, element) function.call function.apply