web-dev-qa-db-ja.com

javascript "this"のコンテキストを変更できますか?

var UI$Contract$ddlForm_change = function() {

    //'this' is currently the drop down that fires the event
    // My question is can I change the context so "this" represents another object? 
    this = SomeObject;

    // then call methods on the new "this"
    this.someMethod(someParam);   
};

これは可能ですか?

25
Hcabnettek

いいえ、できません。

thisに指定された値でメソッドを呼び出すことができます(method.apply()/を使用) method.call())ただし、キーワードthisを再割り当てすることはできません。

42
James

thisが参照するものをinside関数から変更することはできません。

ただし、thisまたはcallを使用して、特定のコンテキストで関数をcall -applyが特定のオブジェクトを参照するようにすることができます。

9
Daniel Roseman

J-Pは正しいです。これは不可能です。 JavaScript言語仕様書ECMA-262を参照してください。ここから標準をダウンロードできます:

http://www.ecma-international.org/publications/standards/Ecma-262.htm

ファイルはECMA-262.pdfで、39ページのセクション10.1.7です。

10.1.7これ

すべてのアクティブな実行コンテキストに関連付けられたこの値があります。この値は、呼び出し元と実行されているコードのタイプによって異なり、制御が実行コンテキストに入るときに決定されます。実行コンテキストに関連付けられたこの値は不変です。

「不変」に注意してください。つまり、変更できません。

7
the.jxc