2012-05-07 9 views
2

最近私のスクリプトに"use strict"を使用し始めました。私が気づいた行動の一つはこれです。 [name of variable]はオブジェクトに対して機能しません。たとえば、"use strict"と可変スコープを使用する

(function(){ 
    "use strict"; 

    window.person = {} 
    person.name = { 
    first: "first name", 
    last: this.first 
    } 
}()); 

厳密なjsではこれ以上許可されていないようです。なぜこれは削除されますか?不利な点はありますか?

+0

「this.first」は何を返すと思いますか? – Andrew

+0

[JavaScriptで「厳密に」を使用するもの」(http://stackoverflow.com/q/1335851/2666313) – mdesdev

答えて

8

暗黙的または明示的なコンテキスト設定なしで呼び出される関数では、thisundefinedになります。

直ちに呼び出される関数の外部コンテキストがグローバルスコープで、それが自分自身のコンテキストに期待したものなら、.call(this)を使用してコンテキストを外部コンテキストのコンテキストに設定できます。

(function(){ 
    "use strict"; 

    window.person = {} 
    person.name = { 
     first: "first name", 
     last: this.first 
    } 
}).call(this); 

かかわらず厳密/非厳密モードの、thisリテラル表記を使用して作成されたオブジェクトを参照することはありません。それがJavaScriptの仕組みです。

関連する問題