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