假设我有一个名为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);

09-27 20:12