SOURCE

// 原型链继承
// 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 命令行工具 X clear

                    
>
console