我有一些看起来像这样的代码:
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 =
我在做什么,这是“危险的”,我应该如何重写我的代码?
感谢您的建议。
答案 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
危险使用警告的详细说明:
有关使用全局this
对象的警告有助于防止在没有new
关键字的情况下意外调用构造函数,这会导致构造函数属性泄漏到全局范围。但是,为了使编译器知道哪些函数是构造函数,需要注释/** @constructor */
。