首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

资源

扫码关注腾讯云开发者

领取腾讯云代金券