JSHint“可能违反了严格的”使用`bind`时(JSHint “Possible strict

2019-06-27 05:04发布

考虑这个简单的代码:

"use strict";

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

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

如果我试图验证此代码,jshint给我的错误Possible strict violation. 其中I调用console.log( this.prop ); 。 这是因为, this是在严格模式下未定义的功能。

但我打电话之前,结合此功能,所以this是正确的对象。

我使用这个“设计模式”,以避免混乱的主要对象。 在参数传递的属性也将杂乱的功能,所以我拒绝这样做。 此外,这也正是bind是。

有没有办法为JSHint让我做到这一点?

Answer 1:

这是非常辛苦,但不运行代码来检测这种情况。 您可以使用选项validthis来禁止这种警告:

"use strict";

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

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

应当指出的是,jshint注释功能范围的。 因此,评论将用于功能工作g和其内部的功能,而不只是下一行。



Answer 2:

您也可以实现,如果你修改代码以下面避免使用同样的效果this一起。

"use strict";

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

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


Answer 3:

下面是不需要的模式或特定标记的jshint的任何改变简单的解决方案:

"use strict";

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

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

jshint假定你下面说功能以大写字母开始的,将被实例化类和总是有约定this可用。



Answer 4:

尝试:

"use strict";

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

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


Answer 5:

这是一个不同的“设计模式”为你把它,它实现了同样的事情,但完全避免了这个问题。

"use strict";

function obj() {
    this.prop = '';
}

obj.prototype.f = function obj_f() {
    this.prop = 'value';
    this.g();
};

obj.prototype.g = function obj_g() {
    console.log( this.prop );
};

你会调用它像这样:

var myO = new obj();
myO.f();


文章来源: JSHint “Possible strict violation.” when using `bind`