CodeQL 文档

在静态方法中错误地使用“this”

ID: js/mixed-static-instance-this-access
Kind: problem
Security severity: 
Severity: error
Precision: high
Tags:
   - correctness
   - methods
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

类的某个方法可以是静态方法,也可以是实例方法。对于静态方法,“this”的值是封闭类。对于实例方法,“this”的值是对象实例本身。因此,无法使用“this”从实例方法引用静态方法,反之亦然。

建议

从静态方法内部引用实例方法时,需要使用类的实例进行限定,而不是“this”。

示例

在以下代码段中,“bar”方法是实例方法,它尝试通过“this”使用静态“baz”方法。这是不可能的,因此该调用将在运行时失败。

class Foo {
    bar(){
        this.baz(42);
    }
    static baz(x){
        // ...
    }
}

应将代码更改为使用封闭类,而不是“this”:Foo.baz(42)

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私