我无法从类中的静态方法调用私有或非静态方法,下面是示例
spin_unlock*
我试图只公开内部调用所有私有方法的staticfun方法,但这给了我class a {
fun1(){
console.log('fun1');
}
static staticfun(){
console.log('staticfun');
this.fun1();
}
}
a.staticfun();
不是一个函数。我试图找到许多方法来用“ this”找到它,但是它确实起作用。
如何在静态方法中调用私有实例方法?
答案 0 :(得分:2)
fun1
不是静态函数,因此您需要定义a
类的新实例才能调用它:
class a {
fun1() {
console.log('fun1');
}
static staticfun() {
console.log('staticfun');
new this().fun1();
}
}
a.staticfun();
您应该注意,这不是一个好习惯。您不应该拥有依赖于非静态逻辑的静态方法。
一种解决方法是将a
的实例传递给静态函数,但这完全不符合使用静态方法的要点。
答案 1 :(得分:1)
首先,请阅读此SO question
有可能,您可以创建类a
的实例,然后从该实例调用方法fun1
。
尽管,从静态方法中调用非静态方法是没有意义的。
static表示此方法属于对象(而不是实例)
class a {
fun1(){
console.log('fun1');
}
static staticfun(){
console.log('staticfun');
const classInstance = new a()
classInstance.fun1();
}
}
a.staticfun();
答案 2 :(得分:0)
如果不想避免实例化函数,另一种方法是直接从类原型中调用函数(实际上是prototype
属性,而不是__proto__
)。
class a {
fun1(){
console.log('fun1');
}
static staticfun(){
console.log('staticfun');
this.prototype.fun1();
}
}
a.staticfun();