每日一答2019-10-12

1. js继承几种方式

  1. 原型链继承
function Father(){
    this.fatherProp=true
}
Father.prototype.getFatherValue=function(){
    return this.fatherProp
}
function Son(){
    this.sonProps=false
}
Son.prototype=new Father()

Son.prototype.getValue=function(){
    return this.sonProps
}
var son=new Son()
console.log(son.getFatherValue())

为啥子类会继承父类的方法(也就是此类方法继承的原理)?那是因为寻找某个属性和方法时候首先会在该对象上找,找不到的话,会向对象的原型上找也就是son.prototype上找,找不到继续像son.prototype.__proto__找也就是上面代码父类的prototype,直到找到最顶端Object.prototype,找不到的话就会报错

2:构造函数继承
核心:在子级构造函数中调用父级构造函数,如何实现在一个构造函数中调用另一个函数–》apply和call
缺点:破坏了复用性。因为每个实例都创建了一份副本。

function Father(){
    this.arr=[1,5,9]
}
function Son(){
    Father.call(this)
}
var son1=new Son()
console.log(son1.arr)
var son2=new Son()
son2.arr.push(44)
console.log(son2.arr)
console.log(son1.arr)

//解决传参问题
function Father(name){
    this.name=name
}
function Son(name){
    Father.call(this,name)
}

var son1=new Son("小敏")
console.log(son1.name)//小敏
var son2=new Son("yidenng")
console.log(son2.name)//yideng

3:组合继承方式(原型链加构造函数继承),取长补短:利用原型链继承需要共享的属性和方法,用构造函数继承各自的属性和方法

function Father(name){
    this.name=name
    this.arr=[1,5,89]
}

Father.prototype.getName=function(){
    console.log(this.name)
}

function Son(name,age){
    Father.call(this,name)
    this.age=age
}

Son.prototype=new Father()
Son.prototype.constructor=Son
Son.prototype.getAge=function(){
    console.log(this.age)
}

var son1=new Son("xiaoming",23)
son1.arr.push(99)
console.log(son1.arr)//1,5,89,99

son1.getName()//xiaoming
son1.getAge()//23

var son2=new Son("一灯",29)
console.log(son2.arr)//1,5,89
son2.getAge()//29
son2.getName()//一灯
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值