レッスンに戻る

"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

説明します。

  1. これは通常のオブジェクトメソッド呼び出しです。

  2. 同じです。ここでは括弧は操作の順番を変更しません。ドットが最初です。

  3. ここにより複雑な呼び出し (expression).method() があります。この呼出しはまるで2行に分割されたかのようにして動作します。:

    f = obj.go; // 式を計算します。
    f();        // 持っているものを実行します

    ここで、f()this なしの関数として実行されます。

  4. (3) と似たようなもので、ドット . の左側に式を持っています。

(3)(4) の振る舞いを説明するために、プロパティ・アクセサ(ドットまたは角括弧)が参照型の値を返すことを思い出す必要があります。

メソッド呼び出し(代入 =||のような)以外の操作は、 this に設定できる情報を持たない通常の値にします。