ES6类语法不为我们提供“经典”继承吗?

时间:2019-06-12 13:04:32

标签: javascript inheritance prototypal-inheritance

我了解在原型继承的情况下,对象通过原型链链接在一起。继承是对其他一些活动对象(实例化)的“引用”。

与基于类的继承一样,通过类(模板)来灌输继承。任何子类实例化都“拥有”父对象的实例。

但是Javascript如何不使用ES6语法实现“经典”继承呢?使用ES6类语法,您要做的实际上是创建模板。并且在实例化对象时,每次都会创建一个单独的父实例。这不是古典继承吗?

2 个答案:

答案 0 :(得分:3)

否,ES6 class语法未实现经典继承。该类的方法仍放在通过原型继承链接到实例的.prototype对象上。

任何一个都没有“模板”。事先不声明属性,实例的形状不固定。它们一直都是普通对象,它们的属性在构造函数中创建。

答案 1 :(得分:2)

是的,class的行为类似于其他语言中的类,因此看起来像“经典继承”。在后台,它仍然是原型继承。

class Animal {}
class Human {}

const me = new Human;

Object.setPrototypeOf(me, Animal.prototype);
console.log(me instanceof Animal); // true