この例では:
var A = {test: 1, foo: function() { return this.test }}
なぜ(少なくとも node.js で)A.foo()
返すのですか? 私は外部の caller にバインドされる1
と思いました、いいえ?this
this
この例では:
var A = {test: 1, foo: function() { return this.test }}
なぜ(少なくとも node.js で)A.foo()
返すのですか? 私は外部の caller にバインドされる1
と思いました、いいえ?this
this
を呼び出すとA.foo()
、this
withinfoo()
が 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()
this
obj
呼び出しを 2 つの別々のステップに分割することで、これを回避できます。
var f = A.foo;
f(); // "this" will not be A in this case.
または、コンマ演算子を悪用します。
(17, x.f)()