object.assign拷贝prototype实现多继承

1. 单继承

// Shape - 父类(superclass)
function Shape() {
  this.x = 0;
  this.y = 0;
}

// Rectangle - 子类(subclass)
function Rectangle() {
  //借用父类构造函数
  Shape.call(this);
}

// 子类续承父类
Rectangle.prototype = Object.create(Shape.prototype);
// 恢复构造函数
Rectangle.prototype.constructor = Rectangle;

2. 多继承

function MyClass() {
    //所有父类构造函数借用
    SuperClass.call(this);
    OtherSuperClass.call(this);
}

// 使用Object.create继承一个类,此时继承了SuperClass的原型链
MyClass.prototype = Object.create(SuperClass.prototype);

// 使用Object.assign拷贝其他父类的方法到自身的prototype
Object.assign(MyClass.prototype, OtherSuperClass.prototype);

// 恢复constructor
MyClass.prototype.constructor = MyClass;

//若不使用Object.create, 全部使用Object.assign, 对象为使用{},会继承Object的原型链,造成原型链断裂
//MyClass.prototype = Object.assign({},SuperClass.prototype,OtherSuperClass.prototype);

 

posted @ 2020-05-09 00:24  全玉  阅读(538)  评论(0编辑  收藏  举报