2009-07-26 19 views
1

FieldEditというオブジェクトがあるとします。私はこのオブジェクトの関数コンストラクタを定義し、それを介してインスタンス化します。 var obj = new FieldEdit()とし、そのメソッドをFieldEdit.prototype.<method name> = function() { ... }で定義します。Javascriptの質問:オブジェクトメソッドの呼び出しに関する問題

オブジェクトの他のメソッド(。this.<method name>();経由)内でこのオブジェクトのメソッドを呼び出すのが失敗する状況はありますか?

私はこれが単に何かよりもJavascriptの私の理解に問題があると思うので、私ができるならこれのためのコードサンプルを投稿するのを避けたいと思います。私のコードは健全で、私の知る限り最良だと確信しています。

答えて

2
this

FieldEdit方法の実行中FieldEdit以外のオブジェクトを参照するであろう最も可能性の高いシナリオは、.call(someOtherScope)又は.apply(someOtherScope, args)で明示的に呼び出さ閉鎖、イベントハンドラ、または任意の関数やメソッドなど、ネストされた範囲内です。

FieldEditインスタンスへの可変参照を維持し、代わりにFieldEditInstance.<method>()を使用することで、それを回避することができます。

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

ああ:のいずれかで、

PrototypeJSあなたは、この目的のためにFunction.bindを持つ関数をラップすることができますが、それは簡単そうに達成ます。実際、私が作成したカスタムイベントハンドラのコールバック関数で起こっています。何が痛い。 –

関連する問題