我在构造函数中创建方法,使用私有值 - 这似乎是创建私有属性并限制对它们的访问的建议模式。
现在我从该类继承并在派生类的构造函数中创建另一个方法,尝试访问它。不幸的是,我得到了例外TypeError: ... is not a function
。
怎么办?我可以使用构造函数,只是创建一个新对象,但这与它的类无关,复制类和超类等的所有属性似乎很烦人,而不是正确的方式。那又怎么办?
以下是一个例子:
class ClassA {
constructor() {
this.getValue = () => "private value";
}
}
class ClassB extends ClassA {
constructor() {
super();
this.getValue = () => `${super.getValue()}, second private value`;
}
}
const a = new ClassA();
const b = new ClassB();
console.log(`a.getValue = ${a.getValue()}`);
console.log(`b.getValue = ${b.getValue()}`);
Fiddle检查控制台。我期望的结果是“私人价值,第二私人价值”。
如果有人能给我一个提示,或者不是一个非常糟糕的解决方法,我会很感激。
谢谢,fea
答案 0 :(得分:0)
super
指的是类prototype
。由于您的方法不是原型方法而是实例方法,遗憾的是它不起作用。但是,您可以将原始函数引用存储在变量中:
const orig = this.getValue.bind(this);
this.getValue = () => `${orig()}, second private value`;
但我个人更喜欢_
模式:
class ClassA {
constructor() {
this._private = "test";
}
getValue(){ return this._private; }
}
class ClassB extends ClassA {
constructor() {
super();
}
getValue(){
return `${super.getValue()}, second private value`;
}
}