gpt4 book ai didi

javascript - jshint 可能出现严格违规错误

转载 作者:数据小太阳 更新时间:2023-10-29 05:21:27 25 4
gpt4 key购买 nike

我正在开发客户端的表格导出插件。插件工作正常。但是当我在 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*/

之外的任何其他解决方案

最佳答案

在您的 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 .

关于javascript - jshint 可能出现严格违规错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44309931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com