1

誰か知っていますか?かなり基本的なように見えますが、以前に尋ねられたこの質問を見つけることができませんでした。

4

2 に答える 2

3

(キーワード)完全に暗黙的contextではなく、明示的に設定および変更できます。this

例えば:

function test () {
  alert(this);
}

test.call("Hello world");

test関数は文字列をコンテキストとして呼び出されます。

結論として、this明示的に定義するか、関数内にいない限り、何が何であるかを知ることはできません。

于 2009-11-14T19:27:11.973 に答える
2

同じ関数thisでも、呼び出し方によって の値が異なります。詳細についてはCrockfordを参照してください。ただし、次の 4 つのケースがあります。

  1. 単純な関数として呼び出され、グローバル/ウィンドウ オブジェクトにバインドされます。
  2. オブジェクトのメソッドとして呼び出され、そのオブジェクトを参照します。
  3. キーワードを介してコンストラクターとして呼び出されるのは、関数の独自のプロパティnewに格納されているオブジェクトから継承する、新しくインスタンス化されたオブジェクトです。prototype
  4. 独自のメソッドapplyまたはcallメソッドによって呼び出され、指定された最初の引数です。

thisこれらのケースが複雑で、退屈で、エラーが発生しやすいと思われる場合は、メソッドの外部に依存することを避けるべき理由がさらにあります。

于 2009-11-14T21:01:41.050 に答える