浅显易懂的JS继承

1.用原型链继承   (要注意的是:在引用数据类型中push进去一个东西会改变原数组)

 function parent(name, age) { //声明一个父函数,并在里面设置一些属性
        this.name = name
        this.age = age
        this.hobby = ['足球', '篮球', '乒乓球']
    }

    function son() {} //声明一个子函数
    son.prototype = new parent('zhansan', 18) //让子函数的原型被父函数赋值
    let B = new son()    //声明一个构造子函数
    let BSon = new son()
    BSon.name = 'lisi' //直接等号赋值不会改变原数组,因为这是基本数据类型
    BSon.hobby = ['无']  //这里虽然是引用数据类型,但是直接等号赋值也不会改变原数组    
    BSon.hobby.push('唱歌')  //添加一项的话会改变原数组
 

2.用构造函数继承   直接push不会改变原数组,直接赋值也不会

// //2.构造函数继承
    function parent() {
        this.name = 'zhangsan'
        this.age = 18
        this.hobby = ['足球', '篮球', '乒乓球']
    }

    function son() {
        parent.call(this) //修改this指向,指向son
    }
    let B = new son()
    let Bb = new son()
    B.hobby.push('唱歌')  //直接push不会改变原数组
    console.log(B);
    console.log(Bb);

3.组合式继承   直接push不会改变原数组,直接赋值也不会

就是有个缺点

  • 相当于parent被实例化了两次,性能方面受到影响
 function parent() {
        this.name = 'zhangsan'
        this.age = 18
        this.hobby = ['足球', '篮球', '乒乓球']
    }
    parent.prototype.value = function() {  //在原型上设置一个函数
        console.log(this.name + this.age);
    }

    function son() {
        parent.call(this)     //让父函数的this指向son
    }
    son.prototype = new parent()    //让子函数的原型被父函数赋值
    B.hobby = ''    //直接赋值引用数据类型不会改变原数组
    B.hobby.push('唱歌')  //直接push引用数据类型也不会改变原数组
    Ba.value()       //调用一下

 4.寄生组合式继承 

 这种方法是组合式继承延展的,最大的区别就是在创建构造函数的时候把它替换为直接创建了一个对象(直接push不会改变原数组,直接赋值也不会

 function parent() {
        this.name = 'zhangsan'
        this.age = 18
        this.hobby = ['足球', '篮球', '乒乓球']
    }
    parent.prototype.value = function() {  //在原型上设置一个函数
        console.log(this.name + this.age);
    }

    function son() {
        parent.call(this)     //让父函数的this指向son
    }
    son.prototype = Object.create(parent.prototype)//直接创建一个父函数原型赋值给子函数原型
    B.hobby = ''    //直接赋值引用数据类型不会改变原数组
    B.hobby.push('唱歌')  //直接push引用数据类型也不会改变原数组
    Ba.value()       //调用一下   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值