是否可以从类的静态方法中调用实例方法?

时间:2019-01-21 01:40:18

标签: javascript

构建调用多态静态方法的实例方法很容易:

Fill

但是,我想做相反的事情-定义一个调用多态实例方法的静态方法-发送VisualBrush作为参数。

class MyClass {
  instanceMethod() {
    this.constructor.staticMethod();
  }
  static staticMethod() {
    console.log('first');
  }
}

class OtherClass extends MyClass {
  static staticMethod() {
    console.log('second');
  }
}
const i = new OtherClass();
i.instanceMethod();

2 个答案:

答案 0 :(得分:1)

如果我了解您在追求……

当您致电OtherClass.staticMethod()时,this将是OtherClass。因此,如果要访问实例方法,则可以在this.prototype上找到它。

class MyClass {
    instanceMethod() {
      console.log('first');
      this.constructor.staticMethod();
    }
    static staticMethod(self) {
       this.prototype.instanceMethod()
       return this.prototype.testVal
    }
  }
  
class OtherClass extends MyClass {
    instanceMethod() {
        console.log('second');
    }
    get testVal(){
        console.log("getting")
        return "test value"
  }

}

// logs 'second':
console.log(OtherClass.staticMethod({}));

MyClass instanceMethod中要小心,因为如果调用MyClass.staticMethod()

,则可以按照设置方式创建无限循环

答案 1 :(得分:-1)

在这种情况下,

Instance仅仅是方法调用的context。 你快到了。将self传递给staticMethod。 然后您可以通过类名来调用它。

MyClass.instanceMethod.call(self)