2015-01-17 7 views
1

я получил следующее (упрощенный) Batman.js файл:Resolve возможно строгое нарушение (и помочь Бэтмен сохранить Готэм)

(function(){ 
    "use strict"; 

    window.Batman = function(){ 
    // Global references 
    this.version = "1.0.1"; 
    }; 

    Batman.prototype.saveGotham = function(params) { 
    var _ = this; // Works fine 
    destroyGotham.call(_, params); 
    }; 

    // Private 
    function destroyGotham(params){ 
    var _ = this; // <!-- "possible strict violation" 
    } 

}()); 

JSHint жалуется на possible strict violation на указанной линии. Как мне обойти это без сброса "use strict"?

P.S: Мне бы хотелось, чтобы неприятный var _ = this ссылался на экземпляр Batman.

ответ

2

Значение, переданное как this, функции в строгом режиме не принудительно превращается в объект.
Для нормальной функции this всегда является объектом, и это глобальный объект, если он вызван с неопределенным или нулевым this, другими словами this обычно является window по умолчанию в нестрогом режиме.

Не только автоматический бокс, но и выставление глобального объекта в браузерах является угрозой безопасности, поскольку глобальный объект обеспечивает доступ к функциям, которые должны быть ограничены «защищенными» средами JavaScript.
Таким образом, для функции строгого режима указанный this не помещается в объект в объект, а если неопределенный, то this по умолчанию не будет определен.

Это означает, что использование this таким образом, просто установив его в переменной

var _ = this; 

в большинстве случаев приведет к this быть неопределенным, что почему jshint говорит, что это «возможно» нарушение, так как это было бы, если бы вы не назвали его call и предоставили это значение.

Игнорировать jshint, что вы делаете в порядке.

+0

И как это исправить? – FloatingRock

+0

Вы игнорируете jshint, так как вы вызываете функцию таким образом, что 'this' будет определен, – adeneo

+0

Спасибо - я узнал, что вы можете добавить'/* jshint validthis: true */'на строку выше жалобы 'var _ = this;' для подавления ошибки. – FloatingRock