JavaScript之各种继承方式和优缺点

  1. 原型链继承
function Parson(){
    this.name = 'hy'
}
Parson.prototype.getName = function(){
    console.log(this.name)
}

function Child(){

}

Child.prototype = new Parson()

var Child1 = new Parson()

Child1.getName() // hy

问题:

  1. 引用类型的属性被所有的实例共享,修改了会影响所有实例
function Parson(){
    this.name = 'hy'
    this.age = [13,15]
}
Parson.prototype.getName = function(){
    console.log(this.name)
}

function Child(){

}

Child.prototype = new Parson()

var Child1 = new Child()
Child1.age.push(16)
console.log(Child1.age) // [ 13, 15, 16 ]

var Child2 = new Child()
console.log(Child2.age) // [ 13, 15, 16 ]


Child1.getName() // hy
Child2.getName() // hy

    2. 在创建 Child 的实例时,不能向Parent传参

2.借用构造函数继承(经典继承)

function Parson(){
    this.names = ['hy', 'ycl']
}

function Child(){
    Parson.call(this)
}

var child1 = new Child()

child1.names.push('zz')
console.log(child1.names) // [ 'hy', 'ycl', 'zz' ]

var child2 = new Child()
console.log(child2.names) // [ 'hy', 'ycl' ]

优点:

  1. 避免了引用类型的属性被所有实例共享
  2. 可以在Child中向Parson传参数
举个例子:
function Parson(name){
    this.names = name
}

function Child(name){
    Parson.call(this , name)
}

var child1 = new Child('hy')

console.log(child1.names) // hy

var child2 = new Child('ycl')
console.log(child2.names) // ycl

问题

  1. 方法都在构造函数中定义,每次创建实例都会创建一遍方法。
 
03-11 05:07