2

this次のコードでキーワードが異なる値を表すのはなぜですか?

var t = {
    a: "a",
    b: {
        c: "c",
        d: function () {
            return this;
        }
    },
    f: function () {
        return this;
    },
    g: this
}

var k = t.f(),
    l = t.g;

alert(k); // returns [object object] i.e 't'
alert(l); // returns [object DOMWindow] i.e 'window'
4

1 に答える 1

6

C ++、Java、C#などの他のプログラミング言語に慣れている場合this、JavaScriptで理解するための最初のことは、他の言語とはまったく異なりthisますが、見た目は非常に似ており、動作も似ている場合があります。

オブジェクトを作成するときは、オブジェクトが作成された時点のtキャプチャして、プロパティに格納します。作成されたときは何でもそうなります。厳密モードを使用していない限り、デフォルトでグローバルオブジェクト(ブラウザでは、)を参照するため、これがデフォルトになります。thisggthistthiswindowt.g

対照的に、t.f関数は呼び出され、呼び出し内にthis存在する値を返します。JavaScript(今のところ)では、関数が定義されている場所ではなく、関数がどのように呼び出されるかによって完全に決定されます。特に、プロパティ参照から関数を取得した式の一部として関数を呼び出すと、呼び出し内のオブジェクトに設定されます。これは、への呼び出し中に、を実行すると、になるという複雑な言い方です。thisthist.f()fthist

(私のブログで)さらに読む:

于 2013-02-28T08:14:21.747 に答える