Google Closure Compiler中“危险使用全局此对象”警告

时间:2012-07-01 01:07:19

标签: javascript google-closure-compiler

我有一些看起来像这样的代码:

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 =

我在做什么,这是“危险的”,我应该如何重写我的代码?

感谢您的建议。

2 个答案:

答案 0 :(得分:6)

我会推荐这样写:

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

但是,真正的解决方法是在构造函数之前的行上使用@constructor JSDoc表示法:

/** @constructor */

答案 1 :(得分:4)

Closure Compiler Error and Warning Reference提供了有关this危险使用警告的详细说明:

  • JS​​C_UNSAFE_THIS
  • JS​​C_USED_GLOBAL_THIS

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