JavaScript面向对象三大特性之一:继承性

本文详细探讨JavaScript面向对象中的继承性,包括师傅与徒弟的类比、各种继承方法(原型链、prototype直接继承、空对象中介、构造函数绑定call&&apply)及其优缺点,以及原型链的工作原理。通过实例解析,帮助读者深入理解JavaScript的继承机制。
摘要由CSDN通过智能技术生成


一.什么是继承性

通常来说继承就类似于儿子继承父亲的财产,但这样说明并不准确,因为这代表父亲将财产给了儿子,父亲自己就没有了,但在JavaScript面向对象中,继承更像师傅与徒弟的关系,师傅将一生所学教给了徒弟,徒弟学会了,但是师傅也没有失去什么,这就是JavaScript面向对象中的继承性。




二.继承方法

接下来看有几种继承方式,和它们的利弊:

1.原型链继承

      function GaoBW() {
   
            this.fang = '大别也';
            this.che = '五菱宏光';
        }

        function Parent(n, m) {
   
            this.name = n
            this.age = m
        }
        Parent.prototype = new GaoBW()
        var tc = new Parent('王铁锤', 30)

        console.log(tc.name, tc.age, tc.fang, tc.che);
        console.log(tc.constructor);

原理:将Parent的原型对象指向GaoBW ,这样Parent的实例化对象也能继承GaoBW的属性

缺点:这么做,会存在继承链紊乱,tc是通过构造函数Farent()创建出来的。但是继承过以后,会发现,tc的构造函数,不在Farent,而是GaoBW

解决办法:手动的纠正继承链

        Parent.prototype.constructor = Parent

最终得到的结果:
Parent的实例化对象继承到了GaoBW的属性,并且也证明了是Parent的实例化对象
在这里插入图片描述

2.使用prototype直接继承

        function GaoBW() {
   
        }
        GaoBW.prototype.fang = '大别也';
        GaoBW.prototype.che = '五菱宏光';

        function Parent(n, m) {
   
            this.name = n
            this.age = m
        }
        Parent.prototype = GaoBW.prototype
        Parent.prototype.constructor = Parent
        var tc = new Parent('王铁锤',
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值