2016-04-27 4 views
1

Google Closure Compiler жалуется на этот код:ПРЕДУПРЕЖДЕНИЕ - опасное использование глобального объекта?

function Message() { 
    this.message = ""; 
    this.nickname = ""; 
    this.time = 0; 
    this.my = false; 
}; 

Что опасно здесь? Как иначе он должен создавать «объекты»? На данный момент я делаю

var m = new Message(); 

, чтобы получить инициализированный объект сообщения типа.

ответ

3

Попробуйте аннотирования код, чтобы сообщить компилятору, что это функция-конструктор:

/** 
* A message 
* @constructor 
*/ 
function Message() { 
    this.message = ""; 
    this.nickname = ""; 
    this.time = 0; 
    this.my = false; 
}; 

См https://developers.google.com/closure/compiler/docs/js-for-compiler#overview

+0

Да, это вариант, но я заинтересован в корни проблемы. Какое преступление обнаружил компилятор google? – pavelkolodin

+1

компилятор считает, что вы ссылаетесь на объект окна, а не на экземпляр Message, потому что он не знает, является ли Message конструктором или нет. – Ozrix

+0

Одна из основных функций компиляторов - это проверка типов, поэтому вам нужно аннотировать. – Ozrix