Eslint参考手册
规则 | Rules
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() {
}
}
进一步阅读
- Classes
- Static Methods
版本
该规则在ESLint 3.4.0中引入。
资源
- Rule source
- Documentation source
规则 | Rules相关
ESLint 是一个代码规范和错误检查工具,有以下几个特性。所有东西都是可以插拔的。你可以调用任意的 rule api 或者 formatter api 去打包或者定义 rule or formatter。任意的 rule 都是独立的。没有特定的 coding style,你可以自己配置。
主页 | https://eslint.org/ |
源码 | https://github.com/eslint/eslint |
发布版本 | 4.12.0 |