让我们假设下面的代码:
class Animal{
constructor(name){
this.name=name;
}
}
class Dog extends Animal{
constructor(lastname){
super();
this.lastname=lastname;
}
}
var animal = new Animal('jim');
var rudy = new Dog('rudy');
除了在子类实例化后delete rudy.name
之外,还有没有父类的 name 属性直接实例化子类的方法吗?
你可以用一个非字符串值覆盖它,特别是 undefined
,它类似于一个不存在的属性:
class Dog extends Animal{
constructor(lastname){
super(undefined);
this.lastname=lastname;
}
}
但实际上,如果你的类没有"父"类所具有的所有属性,它根本不应该是一个子类 - 这将违反 Liskov 替换原则。