0

この例では:

var A = {test: 1, foo: function() { return this.test }}

なぜ(少なくとも node.js で)A.foo()返すのですか? 私は外部の caller にバインドされる1と思いました、いいえ?thisthis

4

2 に答える 2

5

を呼び出すと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

于 2013-03-20T03:40:36.697 に答える
1

Javascriptでは、表記法を使用して関数を呼び出すたびに、にバインドされます。obj.method()thisobj

呼び出しを 2 つの別々のステップに分割することで、これを回避できます。

var f = A.foo;
f(); // "this" will not be A in this case.

または、コンマ演算子を悪用します。

(17, x.f)()
于 2013-03-20T03:40:56.967 に答える