javascript - jshint可能严格违规错误

时间:2017-06-01 14:13:03

标签: javascript jshint

我正在客户端开发一个表导出插件。插件工作正常。但是当我在jshint中验证我的代码时,它会抛出一个错误,指出可能存在严格的违规行为。以下是功能:

function disableExport(){
        if(_(this).exportPlugin !== undefined){
            _(this).exportPlugin.setStyle('pointer-events', 'none');
            _(this).exportPlugin.find('.ebIcon').removeModifier('interactive','ebIcon');
            _(this).exportPlugin.find('.ebIcon').setModifier('disabled','','ebIcon');
        }else{
            console.log('ERROR!');
        }
    }

它说:“如果使用函数调用执行严格模式函数,则其'this'值将是未定义的。”

https://jsfiddle.net/t47L8yyr/

上提供了完整的插件代码

如何解决此问题?除使用/*jshint validthis:true*/

之外的任何其他解决方案

1 个答案:

答案 0 :(得分:5)

disableExport()功能中,您引用了this。如果你正常调用函数......

disableExport()

...在strict Javascript mode中,this将是未定义的。在严格模式之外,this通常是window对象。所以:

disableExport() // `this` will be `window`

"use strict"
disableExport() // `this` will be undefined

这不好。如果要定位window对象,请明确使用它:

_(window).exportPlugin(...) // reference `window`, not `this`

如果您尝试使用this作为函数的参数,请调用它 使用Function.call()Function.apply()时,最好采取实际操作 参数比使用this

function disableExport(target) {
  if(_(target).exportPlugin !== undefined) {
    // ...
  }
}

然后,您可以拨打disableExport(window)或任何其他target。这通常是 最好只在处理定义的对象的方法时使用this 在函数的prototype中,或通过ES6 class syntax