假设我有一个名为FieldEdit
的对象。我为此对象定义了函数构造函数,并通过实例化了它。 var obj = new FieldEdit()
,并通过FieldEdit.prototype.<method name> = function() { ... }
定义其方法。
在什么情况下在对象的其他方法(通过this.<method name>();
)中调用该对象的方法会失败?
请注意,如果可以的话,我想避免为此发布代码示例,因为我认为这纯粹是我对Javascript的理解的问题,而不是其他任何问题。据我所知,我很确定自己的代码是正确的(此外,这是我的知识所在)。
最佳答案
在执行this
方法期间FieldEdit
可能引用FieldEdit
以外的对象的最可能情况是在嵌套范围内,例如闭包,事件处理程序或用.call(someOtherScope)
或。
当然,您可以通过维护对.apply(someOtherScope, args)
实例的变量引用并改用FieldEdit
来解决此问题。
PrototypeJS允许您为此目的用FieldEditInstance.<method>()
包装函数,但通过以下方法很容易实现:
var FieldEditInstance = this;
obj.methodThatUsesACallback(function() {
// use that instead of this
});
要么
var FieldEditInstance = this;
var callback = function() {
// ...
};
// This is more or less what PrototypeJS' Function.bind produces
var boundCallback = function() {
return callback.apply(FieldEditInstance, arguments);
};
obj.methodThatUsesACallback(boundCallback);