2

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

(function(){
  "use strict";

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

その厳密なjsはもうそれを許可していないようです。なぜこれが削除されるのですか?不利な点はありますか?

4

1 に答える 1

8

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

すぐに呼び出される関数の外側のコンテキストがグローバル スコープであり、それが独自のコンテキストに期待されるものである場合、 を使用.call(this)して、そのコンテキストを外側のコンテキストのコンテキストに設定できます。

(function(){
    "use strict";

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

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

于 2012-05-07T02:09:23.440 に答える