继承,优缺点

js继承的方法和优缺点

1.原型链继承

实现方式:将子类的原型链指向父类的对象实例

function Parent(){
    this.name = 'parent'
    this.list = ['a']
}
Parent.prototype.sayHi = function(){
    console.log('hi')
}
function Child(){

}

Child.prototype = new Parent()
var child = new Child()
console.log(child.name)
child.sayHi()

原理:子类实例child的__proto__指向Child的原型链prototype,而Child.prototype指向Parent类的对象实例,该父类对象实例的__proto__指向Parent.prototype,所以Child可继承Parent的构造函数属性、方法

优点:可继承构造函数的数学,父类构造函数的数学,父类原型的数学

缺点:无法向父类构造函数传参;且所有实例共享父类实例的数学,若父类共有属性为引用类型,一个类实例更改父类构造函数共有属性时会导致继承的共有属性发生变化;实例如下:

var a = new Child()
var b = new Child()
a.list.push('b')
console.log(b.list)

2.构造函数继承

实现方式:在子类构造函数中使用call或者apply劫持父类构造函数方法,并传入参数

function Parent(name,id){
    this.id = id
    this.name = name
    this.printName = function(){
        console.log(this.name)
    }
}

Parent.prototype.sayName = function(){
    console.log(this.name)
}

function Child(name,id){
    Parent.call(this,name,id)
}
var child = new Child('jin','1')
child.printName();//jin
child.sayName()//Error

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值