首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JSHint“可能的严格违规。”使用`bind`时

JSHint“可能的严格违规。”使用`bind`时
EN

Stack Overflow用户
提问于 2012-08-21 22:44:54
回答 5查看 32.4K关注 0票数 73

考虑下面这个简单的代码:

代码语言:javascript
复制
"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        g.bind( this )();
    }
};

function g() {
    console.log( this.prop );
}

如果我尝试验证这段代码,在调用console.log( this.prop );的地方,jshint会给出错误Possible strict violation.。这是因为this在函数的严格模式下是未定义的。

但是我在调用这个函数之前绑定了它,所以this是正确的对象。

我使用这个“设计模式”来避免弄乱主对象。在参数中传递属性也会使函数变得混乱,所以我拒绝这样做。此外,这正是bind的作用所在。

有没有办法让JSHint让我这么做?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-22 01:03:58

如果不运行代码就很难检测到这种情况。您可以使用选项validthis取消显示此警告:

代码语言:javascript
复制
"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        g.bind( this )();
    }
};

function g() {
    /*jshint validthis:true */
    console.log( this.prop );
}

需要注意的是,jshint注释是函数作用域。因此,注释将适用于函数g及其内部函数,而不仅仅是下一行。

票数 128
EN

Stack Overflow用户

发布于 2015-06-05 23:52:01

如果您将代码修改为以下代码,以避免同时使用this,也可以达到相同的效果。

代码语言:javascript
复制
"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        g.bind( null, this )();
    }
};

function g(self) {
    console.log( self.prop );
}
票数 7
EN

Stack Overflow用户

发布于 2015-11-10 22:51:58

这里有一个更简单的解决方案,它不需要对模式或jshint的特定标记进行任何更改:

代码语言:javascript
复制
"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        G.bind( this )();
    }
};

function G() {
    console.log( this.prop );
}

jshint假设您遵循这样的约定,即以大写字母开头的函数是将被实例化的类,并且始终具有可用的this

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12057427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档