3
function katana(){
  this.isSharp = true;
}
katana();
assert( isSharp === true, "A global object now exists with that name and value." );

var shuriken = {
  toss: function(){
    this.isSharp = true;
  }
};
shuriken.toss();
assert( shuriken.isSharp === true, "When it's an object property, the value is set within the object." );

私は実際にこのコードが何を伝えようとしているのかわかりません。JavaScriptのコンテキストとは何か、上記のコードでコンテキストは正確に何を表しているのか、誰かに説明してもらえますか?

4

2 に答える 2

3

さて、this === window最初の例とthis === shuriken2番目の例の理由はすべて、これらの関数が作成される場所に関係しています。shuirken.tossオブジェクトの外側を定義するときthisは、ウィンドウオブジェクトを指していることに注意してください。そして、で呼び出すkatananewthis新しく作成されたオブジェクトを指します。

于 2012-12-27T01:34:20.020 に答える
3

最初の呼び出しは次と同等です。

katana.call(window); // window is now referenced as this inside the function

同様の方法で、呼び出しをkatana()次のように変更して、コンテキストを変更できます。

var shuriken = {}
katana.call(shuriken); // shuriken.isSharp === true

2番目の呼び出しには、暗黙的に次の同等の関数呼び出しがあります。

shuriken.toss.call(shuriken);
于 2012-12-27T01:39:13.333 に答える