手动实现ES6继承

156 阅读1分钟

主函数

function People(name) {
  this.type = 'prople';
  this.name = name
  console.log('1111', this.name);
}

People.prototype.eat = function() {
  console.log('吃东西了')
}

function Man(name) {
  this.name = name;
  this.color = 'black';
}

原型继承

Man.prototype = new People();
// 缺点:原型是所有子类实例共享的,改变一个其他的也会改变的
console.log(Man.prototype.eat);

构造函数继承

// 在构造函数中调用父类构造函数
function Man(name) {
  People.call(this)
  People(name);
  People.prototype.eat;
  //console.log(this.name);
}
Man('aaaa')
//  缺点:不能继承父类继承, 函数在构造函数中,每一个子类实例不能共享实例,浪费内存

组合继承

//使用构造函数继承父类函数, 使用原型继承父类函数
function Man(name) {
  Pepple.call(this)
  
}
Man.Prototype = People.prototype;

// 缺点: 父类原型和子类原型是同一个对象,无法区分子类真的是有谁构造的

组合寄生继承

// 在组合继承的继承的基础上,子类继承一个由父类原型生成的空对象
function Man(name) {
    People.call(this);
    
}

Man.prototype = Object.create(People.prototype, {
    constructor: {
        value: Man
    }
})

[Duck Duck Go]文章来源于 www.conardli.top/doc/javascr…