2

thisクラスの関数メンバーでオブジェクトを使用したい。関数は、クラスのインスタンスによって異なる場合があります。正常に動作しますが、GoogleClosureCompilerから警告が送信されます。

thisしたがって、私の質問:プロトタイプでもコンストラクターでもない関数で使用する正しい方法は何ですか?ない場合は、そこで使用する代わりにどうすればよいthisですか?

これが私がやろうとしていることの実例です:

/** @constructor */
function MyAlert() {}
/** @type {string} */
MyAlert.prototype.name = "joe";
/** @type {function()} */
MyAlert.prototype.myAlert;

/** @type {MyAlert} */
var formalAlert = new MyAlert();

/** @type {MyAlert} */
var informalAlert = new MyAlert();

informalAlert.myAlert = function() {alert("Hi " + this.name);}
formalAlert.myAlert = function() {alert("Good morning Mr " + this.name);}

formalAlert.myAlert();
informalAlert.myAlert();

コンパイル中にこの警告が表示され、回避する方法が見つかりませんでした。

JSC_USED_GLOBAL_THIS: dangerous use of the global this object at line 11 character 57
formalAlert.myAlert = function() {alert("Good morning" + this.name);}
                                                         ^

あなたの助けをどうもありがとう!

4

1 に答える 1

2

あなたの例から:

formalAlert.myAlert = function() {...}

プロトタイプをシャドウする(置き換えない)formalAlertに新しい静的プロパティを作成します。完全に有効なJavaScriptですが、コンパイラがこれらを異なるプロパティとして正しく認識していることを理解することが重要です。

この警告を消すには、コンパイラに「this」オブジェクトのタイプを通知する必要があります。

formalAlert.myAlert = /** @this {MyAlert} */ function() {...};
于 2012-04-28T03:52:05.250 に答える