我在Javascript中有一个对象:
function MyObject(aField) {
this.field = aField;
}
MyObject.prototype.aFunction = function() {
return this.field;
}
然后
var anInstance = new MyObject("blah");
var s = anInstance.aFunction();
这样可以正常工作,但如果我将该函数传递给另一个函数:
callLater(anInstance.aFunction);
我无法控制callLater
并且它已缩小,但它似乎正在使用aFunction
或call()
调用apply()
。因此,this
指向另一个对象,field
未定义。
避免这种情况的最佳做法是什么?
答案 0 :(得分:2)
那是因为你失去了this
的价值而是试试这个:
callLater(function() { anInstance.aFunction() });
解释,想一想
function MyObject(aField) {
this.field = aField;
}
function MyObject2(aField) {
this.field = aField;
}
MyObject.prototype.aFunction = someFunct;
MyObject2.prototype.aFunction = someFunct;
现在someFunct
属于什么?
好好尝试MyObject.prototype.aFunction === MyObject2.prototype.aFunction
这是真的!
您看到问题因此需要从类中调用它,而不仅仅是通过值引用。