SOURCE

function Person(){
    this.name = 'zhansan'
    this.age = 22
}

Person.prototype.getName = function(){
    console.log(this.name)
}

// 1、原型链继承
/*
优点:
    实例可以访问构造函数内部的属性和构造函数原型中的属性和方法
缺点:
    继承方式单一
    新实例无法向父类构造函数传参
    多个实例共用一个构造函数的原型,导致构造函数中的属性和方法改变后全部实例也跟着改变
*/
// function Child(){
// }
// Child.prototype = new Person()
// let child = new Child()
// child.getName()

// 2、构造函数继承
/*
优点:
    每个实例都有属于自己私有的属性
    实例可以向父类构造函数传递参数
    可以继承多个构造函数属性
缺点:
    不能向初级父类构造函数传递参数
*/ 
// Person = function(){
//     this.name = '张三'
//     this.color = ['red','blue','green']
// }

// function Child(age){
//     Person.call(this)
//     this.age = age
// }

// let child = new Child(22)
// console.log(child.age)

// 3.组合继承
Person = function(name){
    this.name = name
    this.color = ['red','blue','yellow']
}

Person.prototype.getName = function(){
    console.log(this.name)
}

function Child(name,age){
    Person.call(this,name)
    this.age =age
}
Child.prototype = new Person()

let child = new Child('章三',23)
child.getName()
console 命令行工具 X clear

                    
>
console