在静态方法中错误地使用“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
类的某个方法可以是静态方法,也可以是实例方法。对于静态方法,“this”的值是封闭类。对于实例方法,“this”的值是对象实例本身。因此,无法使用“this”从实例方法引用静态方法,反之亦然。
建议¶
从静态方法内部引用实例方法时,需要使用类的实例进行限定,而不是“this”。
示例¶
在以下代码段中,“bar”方法是实例方法,它尝试通过“this”使用静态“baz”方法。这是不可能的,因此该调用将在运行时失败。
class Foo {
bar(){
this.baz(42);
}
static baz(x){
// ...
}
}
应将代码更改为使用封闭类,而不是“this”:Foo.baz(42)
。
参考资料¶
Mozilla 开发者网络:类和静态方法.