2009-07-26 34 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