"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 に設定できる情報を持たない通常の値にします。