假设我有一个名为FieldEdit
的对象。我为这个对象定义了函数构造函数,通过它实例化它。 var obj = new FieldEdit()
,并按FieldEdit.prototype.<method name> = function() { ... }
定义其方法。
在什么情况下,在对象的其他方法(通过。this.<method name>();
)中调用此对象的方法会失败?
请注意,如果可以,我想避免为此发布代码示例,因为我认为这只是我对Javascript理解的问题,而不是真的。据我所知,我非常确定我的代码是合理的(而且我的知识就是这里的问题)。
答案 0 :(得分:2)
this
在执行FieldEdit
方法期间引用FieldEdit
以外的对象的最可能情况是在嵌套范围内,如闭包,事件处理程序或任何函数或使用.call(someOtherScope)
或.apply(someOtherScope, args)
明确调用的方法。
当然,您可以通过维护对FieldEdit
实例的变量引用并使用FieldEditInstance.<method>()
来解决这个问题。
PrototypeJS允许您为此目的用Function.bind
包装函数,但是否则很容易实现,或者使用:
var FieldEditInstance = this;
obj.methodThatUsesACallback(function() {
// use that instead of this
});
OR
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);