1
我已经适应了Crockford的对象()函数,这样我可以在传递一些参数和自动运行在新对象的初始化函数:属性附加到错误的对象
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");
由于某些原因_property被添加到Windows对象中。如果我构建一个公共方法并使用this.build()调用它,则停止。
任何人都可以解释为什么会发生这种情况?
为什么它在这个特定的实例中没有上下文?我确定我已经在一个班级里面调用了函数,而不使用“this”。过去很多次没有得到这个问题。是因为我从原型中获得build()“二手牌”,而不是将它用在最初定义的对象中?这是否意味着我将不得不为每个函数使用.call,或者在从原型继承时使它们全部公开? – wheresrhys 2010-09-15 16:08:52
@ wheresrhys:您不必为每个私人会员电话使用'call'或'apply'。这意味着你不能在没有这些私有方法的情况下使用'this'。 – palswim 2010-09-15 17:31:07