如何调用同名父函数?
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();
考虑以下代码:
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();