// 原型链继承
// function Person (){
// this.name = 'zhudanmei'
// }
// Person.prototype.getName = function(){
// console.log(this.name)
// }
// function Child(){
// }
// Child.prototype = new Person()
// var child1 = new Child()
// console.log(child1.getName())
// // 缺点
// // 1.引用类型的属性被所有实例共享
// function Person (){
// this.name = ['zhu','hu']
// }
// Person.prototype.getName = function(){
// console.log(this.name)
// }
// function Child(){
// }
// Child.prototype = new Person()
// var child1 = new Child()
// console.log(child1.name)
// child1.name.push('ya')
// console.log(child1.name)
// var child2 = new Child()
// console.log(child2.name)
// 2.在创建 Child 的实例时,不能向Parent传参
// 2.构造函数继承(经典继承)
// function Person(){
// this.name = ['zhu','hu']
// }
// function Child(){
// Person.call(this)
// }
// var person1 = new Child()
// person1.name.push('wang')
// console.log(person1.name)
// var child2 = new Child()
// console.log(child2.name)
// 这种继承优点
// 1.避免了引用类型的属性被所有实例共享
// 2.可以在 Child 中向 Parent 传参
function Person(name){
this.name = name
}
function Child(name){
Person.call(this,name)
}
var person1 = new Child('zhudanmei')
console.log(person1.name)
// 缺点:
// 方法都在构造函数中定义,每次创建实例都会创建一遍方法。
// 3. 组合继承(原型链和构造函数相结合)
function Person(name){
this.name = name
this.colors = ['red','blue']
}
function Child(name,age){
Person.call(this,name)
this.age= age
}
Child.prototype = new Person()
Child.prototype.constructor = Child;
var child1 = new Child('zhu', '18');
child1.colors.push('black')
console.log(child1.name)
console.log(child1.age)
console.log(child1.colors)
console.log(child1.colors)
// 优点:融合原型链继承和构造函数的优点,是 JavaScript 中最常用的继承模式。
console