最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - "dangerous use of the global this object" warning in Google Closure Compiler - Stack Overflow

programmeradmin7浏览0评论

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 piler 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.

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 piler 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.

Share Improve this question asked Jul 1, 2012 at 1:07 frenchiefrenchie 52k117 gold badges319 silver badges527 bronze badges 1
  • possible duplicate of this: stackoverflow./questions/5301373/… – William Niu Commented Jul 1, 2012 at 1:11
Add a ment  | 

2 Answers 2

Reset to default 6

I would remend 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 */

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 piler to know which functions are intended to be constructors, the annotation /** @constructor */ is required.

发布评论

评论列表(0)

  1. 暂无评论