我不明白为什么每个人都在使用Boy.prototype = new Human;
模拟继承。看,我们要的是A的函数对吗?我们可以在不实例化新 A 的情况下做到这一点(事实上,实例化新 A 确实会给我们带来不希望的结果,因为我们实际上正在运行我们不想要的实例化函数)
那么这不是更好的解决方案吗?
for (var prop_name in Human.prototype) {
Object.defineProperty(
Boy.prototype,
prop_name,
Object.getOwnPropertyDescriptor(Human.prototype,prop_name)
);
}
假设我们是如此特殊并且不仅想要 Human.prototype 中的可枚举属性,我们仍然可以通过在原型链上使用Object.getOwnPropertyNames
和调用它来实现它,而原型链反过来又可以通过Object.getPrototypeOf
.
Boy.prototype = new Human;
那么当我们有更好的选择时,模拟继承到底有什么好处呢?