2

我想this在类的函数成员中使用该对象。该函数可以根据类的实例而有所不同。它工作正常,但 Google Closure Compiler 会向我发送警告,这让我觉得我做得不对。

因此我的问题是: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 回答