"this" の値を説明してください
重要性: 3
下のコードで、user.go()
メソッドを4回連続で呼び出すつもりです。
しかし、呼び出し (1)
と (2)
は (3)
と (4)
とは異なっています。なぜでしょう?
let obj, method;
obj = {
go: function() { alert(this); }
};
obj.go(); // (1) [object Object]
(obj.go)(); // (2) [object Object]
(method = obj.go)(); // (3) undefined
(obj.go || obj.stop)(); // (4) undefined
説明します。
-
これは通常のオブジェクトメソッド呼び出しです。
-
同じです。ここでは括弧は操作の順番を変更しません。ドットが最初です。
-
ここにより複雑な呼び出し
(expression).method()
があります。この呼出しはまるで2行に分割されたかのようにして動作します。:f = obj.go; // 式を計算します。 f(); // 持っているものを実行します
ここで、
f()
はthis
なしの関数として実行されます。 -
(3)
と似たようなもので、ドット.
の左側に式を持っています。
(3)
と (4)
の振る舞いを説明するために、プロパティ・アクセサ(ドットまたは角括弧)が参照型の値を返すことを思い出す必要があります。
メソッド呼び出し(代入 =
や ||
のような)以外の操作は、 this
に設定できる情報を持たない通常の値にします。