javascript vscode 在使用`bind`时JSHint“可能严格违规”




jshint使用 (4)

考虑这个简单的代码:

"use strict";

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

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

如果我尝试验证此代码,jshint会给我错误Possible strict violation. 我打电话给console.log( this.prop ); 。 这是因为this在函数的严格模式中是未定义的。

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

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

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


尝试:

"use strict";

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

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

这是一种与您所说的不同的“设计模式”,它实现了同样的功能,但完全避免了这个问题。

"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进行任何模式或特定标记的更改:

"use strict";

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

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

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


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

"use strict";

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

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




jshint