class A {
}
class B {
}
Object.setPrototypeOf(B.prototype, A.prototype);// B的实例继承A的实例
Object.setPrototypeOf(B, A);// B继承A的静态属性
or
class B extends A {
}
Object.setPrototypeOf的简单实现如下:
Object.setPrototypeOf = function (obj, proto) {
obj.__proto__ = proto;
return obj;
}
所以继承相当于
B.prototype.__proto__ = A.prototype;
B.__proto__ = A;
Class作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链。
这两条继承链,可以这样理解:作为一个对象,子类(B)的原型(__proto__属性)是父类(A);作为一个构造函数,子类(B)的原型(prototype属性)是父类的实例。