关于javascript:js的继承方法二

3次阅读

共计 893 个字符,预计需要花费 3 分钟才能阅读完成。

原型链的继承

// 原型链继承

/**
 * 外围: 将父类的实例作为子类的原型
 * 长处:办法复用
 *     因为办法定义在父类的原型上,复用了父类的构造函数办法,比方 say 办法
 * 毛病:
 *     创立子类实例的时候,不能向父类穿参数
 *     子类实例共享了父类的构造函数的援用属性,比方 arr 属性
 *     无奈实现多继承
 *     
 * 
 * */ 

 function Parent(name){
    this.name = name || '父类' // 实例的根本属性(该属性强调公有,不共享)this.arr = [1]  //  该属性强调公有,不共享
}
Parent.prototype.say = function (){ // 定义在原型对象上的办法(强调复用,须要共享)console.log('hello')
}

function Child(like){this.like = like}

Child.prototype = new Parent()  // 外围,此时 Child.prototype.constructor === Parent
console.log(Child.prototype.constructor === Parent) //  true
// 一个残缺的原型对象必须有 constructor
Child.prototype.constructor = Child // 修改 constructor 指向
let boy1 = new Child()
let boy2 = new Child()
// 长处:共享了父类构造函数的 say 办法
console.log(boy1.say()) // hello
console.log(boy2.say())  // hello
console.log(boy1.say() === boy2.say())   // true

// 毛病 1   不能传参
console.log(boy1.name) // 父类
console.log(boy2.name) // 父类
console.log(boy1.name === boy2.name)  // true

// 毛病 2   子类实例共享了父类的援用属性 比方 arr
boy1.arr.push(2)
// 批改了 boy1 的 arr,影响了 boy2 的 arr
console.log(boy2.arr)  // [1,2]
正文完
 0