2015-01-17 28 views
1

我已经得到了以下(简化)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实例。

回答

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