ES6 继承

248 阅读1分钟

class A {}

class B extends A {}

const a1 = new A()
const b1 = new B()

console.log(typeof A) // function
console.log(A === A.prototype.constructor)

console.log(B.__proto__ === A) // true
console.log(B.prototype.__proto__ === A.prototype) // true

console.log(b1.__proto__.__proto__ === a1.__proto__)

子类B的__proto__属性指向父类A,子类B的prototype属性的__proto__属性指向父类A的prototype属性.      
类的继承是按照下面的模式实现的
class A {}

class B {}

// B 的实例继承 A 的实例
Object.setPrototypeOf(B.prototype, A.prototype);
// B 继承 A 的静态属性
Object.setPrototypeOf(B, A);

Object.setPrototypeOf = function (obj, proto) {
  obj.__proto__ = proto;
  return obj;
}