gpt4 book ai didi

javascript - 如何防止特定方法的继承?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:16 26 4
gpt4 key购买 nike

假设我有两个类,ABB 扩展了 A,因此继承了它的所有方法。如果我愿意,我也可以覆盖它们。我的问题是我是否可以阻止 B 继承 A 的特定方法。到目前为止我尝试过的看起来像这样。

// setup
class A {
constructor(x) {
this.x = x;
}

valueOf() {
return this.x;
}

toString() {
return `{x:${this.x}}`;
}
}

class B extends A {
constructor(x) {
super(x);
delete this.valueOf;
}
}

delete B.prototype.valueOf;

// example
const a = new A(42);
const b = new B(42);

// should work
console.log(a.valueOf());
// should throw TypeError, not a function
console.log(b.valueOf());

最佳答案

一些人已经告诉您如何解决您的问题。现在我想说服你不要这样做。 ;-)

继承应该为 IS-A 关系建模。或者,更具体地说,是一个 IS-SUBSTITUTABLE-FOR-A 关系。那是 Liskov Substitution Principle (SOLID 中的“L”)。

任何期望对“A”对象进行操作的代码都应该能够被赋予“B”对象而不是(“A”代替“B”)并且一切都应该仍然正常工作.但是如果“B”缺少一个方法,如果它不提供“A”的完整接口(interface),那么它就不再是可替代的,而且很有可能这不是使用继承的正确情况。

关于javascript - 如何防止特定方法的继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com