2009-07-26 31 views
1

说我有一个对象叫FieldEdit。我定义了这个对象的函数构造函数,并通过实例化它。 var obj = new FieldEdit(),并通过FieldEdit.prototype.<method name> = function() { ... }定义其方法。Javascript问题:调用对象方法的问题

在什么情况下会在对象的其他方法(通过。this.<method name>();)中调用此对象的方法失败?

请注意,如果可以的话,我想避免发布代码示例,因为我认为这对于我对JavaScript的理解来说并不简单,真的。我非常肯定我的代码是完全正确的,据我所知(这是我的知识,这里的问题除此之外)。

回答

2

最可能的情形,其中将thisFieldEdit方法执行期间引用非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); 
+0

啊。事实上,它发生在我构建的自定义事件处理程序的回调函数中。多么痛苦。 – 2009-07-26 06:27:08