この例では:
var A = {test: 1, foo: function() { return this.test }}
なぜ(少なくとも node.js で)A.foo()返すのですか? 私は外部の caller にバインドされる1と思いました、いいえ?thisthis
この例では:
var A = {test: 1, foo: function() { return this.test }}
なぜ(少なくとも node.js で)A.foo()返すのですか? 私は外部の caller にバインドされる1と思いました、いいえ?thisthis
を呼び出すとA.foo()、thiswithinfoo()が objectAに設定されます。これは、関数を呼び出したものです。したがって、this.testの値があり1ます。
またはthisを使用して参照先を変更できます。.call().apply()
A.foo.call(newThisValue);
理由については...これにより、優れた柔軟性が得られます。this何かを実行する関数がある場合、 JavaScript の構築方法により、その関数をobject特定の方法で任意の関数に適用できます。説明するのは少し難しいですが、継承などの状況で役立ちます。参照: http://trephine.org/t/index.php?title=JavaScript_call_and_apply
Javascriptでは、表記法を使用して関数を呼び出すたびに、にバインドされます。obj.method()thisobj
呼び出しを 2 つの別々のステップに分割することで、これを回避できます。
var f = A.foo;
f(); // "this" will not be A in this case.
または、コンマ演算子を悪用します。
(17, x.f)()