解决可能的严格违规(并帮助蝙蝠侠拯救哥谭)
Resolve possible strict violation (and help Batman save Gotham)
我有以下(简化的)Batman.js
文件:
(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
实例
在严格模式下作为 this
传递给函数的值不会强制成为对象。
对于普通函数,this
始终是一个对象,如果使用未定义或 null this
调用,则它是全局对象,换句话说,this
通常是 window
默认为非严格模式。
不仅自动装箱会带来性能成本,而且在浏览器中公开全局对象也是一种安全隐患,因为全局对象提供对 "secure" JavaScript 环境必须限制的功能的访问。
因此对于严格模式的函数,指定的 this
不会被装箱到对象中,如果未指定,则 this
默认为未定义。
这意味着以这种方式使用this
,只需将其设置为一个变量
var _ = this;
在大多数情况下会导致 this
未定义,这就是为什么 jshint 说这是 "possible" 违规,如果你没有' 用 call
调用它并提供一个 this-value。
忽略jshint,你做的很好。
我有以下(简化的)Batman.js
文件:
(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
实例
在严格模式下作为 this
传递给函数的值不会强制成为对象。
对于普通函数,this
始终是一个对象,如果使用未定义或 null this
调用,则它是全局对象,换句话说,this
通常是 window
默认为非严格模式。
不仅自动装箱会带来性能成本,而且在浏览器中公开全局对象也是一种安全隐患,因为全局对象提供对 "secure" JavaScript 环境必须限制的功能的访问。
因此对于严格模式的函数,指定的 this
不会被装箱到对象中,如果未指定,则 this
默认为未定义。
这意味着以这种方式使用this
,只需将其设置为一个变量
var _ = this;
在大多数情况下会导致 this
未定义,这就是为什么 jshint 说这是 "possible" 违规,如果你没有' 用 call
调用它并提供一个 this-value。
忽略jshint,你做的很好。