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

Closure Compiler Error and Warning Reference提供了与危险使用相关的警告的详细解释this

  • JSC_UNSAFE_THIS
  • JSC_USED_GLOBAL_THIS

关于使用全局this对象的警告有助于防止意外调用没有new关键字的构造函数,这会导致构造函数属性泄漏到全局范围内。然而,为了让编译器知道哪些函数打算成为构造函数,注释/** @constructor */是必需的。

于 2012-07-01T02:10:32.343 回答