解决可能的严格违规行为(并帮助蝙蝠侠拯救哥谭)

Resolve possible strict violation (and help Batman save Gotham)

本文关键字:帮助 蝙蝠侠 拯救 哥谭 解决      更新时间:2023-09-26

我有以下(简化的)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"的情况下解决此问题?

PS:我希望麻烦的var _ = this引用Batman实例。

严格模式下作为this传递给函数的值不会强制成为对象。
对于普通函数,this始终是一个对象,如果使用未定义或空this调用,则它是全局对象,换句话说,this通常是非严格模式下默认的window

自动装箱不仅会带来性能成本,而且在浏览器中公开全局对象也是一种安全隐患,因为全局对象提供了对"安全"JavaScript 环境必须限制的功能的访问。
因此,对于严格模式函数,指定的this不会框到对象中,如果未指定,则默认情况下将未定义this

这意味着以这种方式使用this,只需将其设置为变量即可

var _ = this;

在大多数情况下,this是未定义的,这就是为什么 JSint 说这是一个"可能"的违规行为,就像你没有用 call 调用它并提供这个值一样。

忽略jshint,你正在做的事情很好。