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中引入。