SOURCE

function Animal (name) {
    this.name = name || "动物"
    this.type = "Animal 类"
    this.sleep = function () {
      console.log(this.name +'正在睡觉!')
    }
}

Animal.prototype.eat = function (food) {
    console.log(this.name +'正在吃:'+ food);
}


// 子类
function Cat (name) {
  this.name = name 
}

// 原型继承

Cat.prototype = new Animal()
Cat.prototype.constructor = Cat


const cat = new Cat("加菲猫")

console.log(cat.type) // Animal 类
console.log(cat.name) // 加菲猫
console.log(cat.sleep()) // 加菲猫正在睡觉!
console.log(cat.eat('火腿肠')) // 加菲猫正在吃:火腿肠


/* 说明:

在子类Cat中,我们增加了name属性,在生成子类Cat的实例时,name属性值会覆盖父类Animal的name属性值,因此输出字符串“加菲猫”,而并不会输出父类Animal的name属性“动物”。


原型链继承的优点:

1.简单,易于实现, 只需要设置子类的prototype属性为父类的实例即可,实现起来简单。
2.继承关系纯粹; 生成的实例既是子类的实例,也是父类的实例。
3.可通过子类直接访问父类原型链属性和函数

原型链继承的缺点:

1.子类的所有实例将共享父类的属性
2.在创建子类实例时,无法向父类的构造函数传递参数
3.无法实现多继承
4.为子类增加原型对象上的属性和函数时,必须放在new Animal()函数之后

*/
console 命令行工具 X clear

                    
>
console