3

私はこのように見えるいくつかのコードを持っています:

var MyObject = function () {
  this.Prop1 = "";
  this.Prop2 = [];
  this.Prop3 = {};
  this.Prop4 = 0;
}

そして、私は後でこれを持っています:

var SomeObject = new MyObject();

高度なモードでクロージャコンパイラを介してコードを実行すると、dangerous use of the global this objectすべての行に警告が表示されますthis.Prop =

「危険」なことをしているのですが、コードをどのように書き直す必要がありますか?

あなたの提案をありがとう。

4

2 に答える 2

6

このように書くことをお勧めします:

function MyObject() {
  this.Prop1 = "";
  this.Prop2 = [];
  this.Prop3 = {};
  this.Prop4 = 0;
}

ただし、実際の修正は@constructor、コンストラクターの前の行でJSDoc表記を使用することです。

/** @constructor */
于 2012-07-01T01:14:47.557 に答える
4

クロージャコンパイラのエラーと警告のリファレンスでは、次の危険な使用に関連する警告の詳細な説明を提供していますthis

  • JSC_UNSAFE_THIS
  • JSC_USED_GLOBAL_THIS

グローバルオブジェクトの使用に関する警告はthis、キーワードなしでコンストラクター関数を誤って呼び出すことを防ぐのに役立ちますnew。これにより、コンストラクターのプロパティがグローバルスコープにリークする可能性があります。ただし、コンパイラーがどの関数がコンストラクターになることを意図しているかを知るには、アノテーション/** @constructor */が必要です。

于 2012-07-01T02:10:32.343 に答える