繁体   English   中英

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

[英]Is it possible to call an instance method from a static method of a class?

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

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();

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

class MyClass {
  instanceMethod() {
    console.log('first');
    this.constructor.staticMethod();
  }
  static staticMethod(self) {
     // how to call??
     instancefromstatic(this).instanceMethod.call(self);
  }
}

class OtherClass extends MyClass {
  instanceMethod() {
    console.log('second');
  }
}
OtherClass.staticMethod({});

如果我了解您在追求……

当你调用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()则可以按照设置方式创建无限循环。

在这种情况contextInstance只是方法调用的context 你快到了。 self传递给staticMethod。 然后可以通过类名调用它。

MyClass.instanceMethod.call(self)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM