我正在尝试从函数设置对象的属性:
function createObject(){
var self={};
self.foo=function(){
this.wheatly="apple";
}
return self;
}
问题是,当我调用 self.foo() 时,'this' 指的是函数对象 (self.foo),而不是父对象 (self)。 如何我强制函数设置父级的属性? stackoverflow 上有很多类似的问题,但作者继续使用这个“闭包”的东西,这应该适用于这里???
编辑:
我忘了提到该函数是异步调用的,所以这里有一个更好的例子:
http://jsfiddle.net/Pj59q/
让我困惑的是控制台(chrome)说 this
是一个 XMLHttpRequest (大概是 self.ajax
中声明的)。是this
关键字仅指称为该函数的任何对象?
最佳答案
x = createObject()
>> Object {foo: function}
x.foo()
x
>> Object {foo: function, wheatly: "apple"}
那么,问题出在哪里呢?这是预期的行为。顺便说一句,这与闭包无关。
更新
看来您没有提供所有必要的信息。您需要将传递给 ajax 调用的回调绑定(bind)起来,以便它知道 this
应该是什么:
r.onload=this.foo.bind(this);
顺便说一句,您构建 createObject
的方式有点奇怪。更惯用的是:
function createObject(){
return {
foo: function() {
this.wheatly="apple";
}
};
}
关于javascript - JS 关闭怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861967/