如何调用同名父函数?

How to call an identically-named parent function?

考虑以下代码:

class Base {
   constructor() {
      let _myPrivateData = 'Base';
      this.print = () => { console.log(_myPrivateData); };
   }
};

class Derived extends Base {
   constructor() { 
      super();
      this.print = () => { this.print(); console.log('Derived'); };
      //                   ↑↑↑↑
   } 
};

我已经避免使用 methods 符号来加强封装数据的隐私(即 _myPrivateData)。
使用 this(在标记的部分)会导致 "infinite recursion"super 关键字不能在那里使用,因为它只在方法内部有效。我也试过 Base.prototype.print() 没有用!

那么,如何从 Derived [=29] 中的同名函数内部调用 Base class 中定义的 print() 函数=]?

您可以在覆盖之前保存 this.print 的当前值(它仍然指向 Base class 中定义的 print):

class Base {
   constructor() {
      let _myPrivateData = 'Base';
      this.print = () => { console.log(_myPrivateData); };
   }
};

class Derived extends Base {
   constructor() { 
      super();
      let print = this.print; // <-- Save the current value before overriding
      this.print = () => { print(); console.log('Derived'); };
      //                   ↑↑↑↑↑
   } 
};

var x = new Derived();

x.print();