Eslint
规则 | Rules

class-methods-use-this

强制使用类方法this(class-methods-use-this)

如果一个类方法没有使用this,它有时可以变成一个静态函数。如果将该方法转换为静态函数,那么调用该特定方法的类的实例也必须转换为静态调用(MyClass.callStaticMethod()

有可能有一个不使用的类方法this,比如:

class A { constructor() { this.a = "hi"; } print() { console.log(this.a } sayHi() { console.log("hi" } } let a = new A( a.sayHi( // => "hi"

在上面的例子中,sayHi方法没有使用this,所以我们可以使它成为一个静态方法:

class A { constructor() { this.a = "hi"; } print() { console.log(this.a } static sayHi() { console.log("hi" } } A.sayHi( // => "hi"

在上面的例子中还要注意,如果将方法切换到静态方法,那么调用静态方法()的类的实例let a = new A( a.sayHi(必须更新为静态调用(A.sayHi(),而不是让类的实例调用方法

规则细节

该规则旨在标记不使用的类方法this

规则的错误代码示例:

/*eslint class-methods-use-this: "error"*/ /*eslint-env es6*/ class A { foo() { console.log("Hello World" /*error Expected 'this' to be used by class method 'foo'.*/ } }

规则的正确代码示例:

/*eslint class-methods-use-this: "error"*/ /*eslint-env es6*/ class A { foo() { this.bar = "Hello World"; // OK, this is used } } class A { constructor() { // OK. constructor is exempt } } class A { static foo() { // OK. static methods aren't expected to use this. } }

选项

例外

"class-methods-use-this": [<enabled>, { "exceptMethods": [<...exceptions>] }]

exceptMethods选项允许您传递一组您想要忽略警告的方法名称。例如,你可能有一个来自外部库的规范,它要求你将一个方法改写为常规函数(而不是静态方法),并且不在this函数体中使用。在这种情况下,您可以添加该方法以在警告中忽略。

使用 exceptMethods 的情况下使用此规则的代码不正确的示例:

/*eslint class-methods-use-this: "error"*/ class A { foo() { } }

与 exceptMethods 一起使用时,此规则的正确代码示例:

/*eslint class-methods-use-this: ["error", { "exceptMethods": ["foo"] }] */ class A { foo() { } }

进一步阅读

版本

该规则在ESLint 3.4.0中引入。

资源