1

私は以下のコードを持っています:

this.color = "red";
var o = {color: "blue"};
function sayColor() {
  console.log(this.color);
}
sayColor();
sayColor.call(this);
sayColor.call(o);

@ジムデビル、

ここに新しい発見があります:

  1. そのコードスニペットをブラウザで実行すると、「赤、赤、青」が継続的に出力されます。
  2. ノード端末で直接実行すると、「赤、赤、青」も連続して出力されます。
  3. しかし、そのコードをファイルfunctionTypeThisExample.jsとして保存しnode functionTypeThisExample.js、ターミナルで実行すると、 「undefined、red、blue」が出力されます。

だから私の質問は最後の状況で何が起こるのですか?

4

1 に答える 1

2

thisノード内はthisJS内と同じです。これは、現在のコンテキストを表すオブジェクトです。

this.color = "red";

ここでは、これはグローバルオブジェクトです

var o = {color: "blue"};
function sayColor() {
  console.log(this.color);
}

sayColor();

この場合、これはまだグローバルオブジェクトです

sayColor.call(this);

これはグローバルオブジェクトですが、「デフォルト」ではなく、呼び出しを介して適用されます

sayColor.call(o);

これはo

ただし、ノード(OS Xでは0.6.18)で実行すると、ブラウザーの場合と同じように「赤、赤、青」が表示されます。

于 2012-06-02T04:07:58.020 に答える