“dangerous use of the global this object” warning in Google Closure Compiler

纵然是瞬间 提交于 2019-12-29 08:08:13

问题


I have some code that looks like this:

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

And then I later have this:

var SomeObject = new MyObject();

When I run my code through closure compiler in advanced mode, I'm getting the warning dangerous use of the global this object on every line where I have this.Prop =

What am I doing that's "dangerous" and how should I rewrite my code?

Thanks for your suggestions.


回答1:


I would recommend writing it like this:

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

However, the real fix is to use the @constructor JSDoc notation on the line before the constructor:

/** @constructor */



回答2:


The Closure Compiler Error and Warning Reference provides detailed explanations for the warnings related to the dangerous use of this:

  • JSC_UNSAFE_THIS
  • JSC_USED_GLOBAL_THIS

The warning about using the global this object helps prevent accidentally calling a constructor function without the new keyword, which would result in the constructor properties leaking into the global scope. However, for the compiler to know which functions are intended to be constructors, the annotation /** @constructor */ is required.



来源:https://stackoverflow.com/questions/11278870/dangerous-use-of-the-global-this-object-warning-in-google-closure-compiler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!