位置: 编程技术 - 正文

学习JavaScript设计模式(继承)(javascript怎么学)

编辑:rootadmin

推荐整理分享学习JavaScript设计模式(继承)(javascript怎么学),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript如何学,javascript教程chm,javascript设计,javascript设计,javascript教程chm,javascript教程chm,javascript课设,javascript设计,内容如对您有帮助,希望把文章链接给更多的朋友!

1、继承

在javascript中继承是一个非常复杂的话题,比其他任何面向对象语言的中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需要使用一个关键字即可。与它们不同,在javascript中要想达到传承公用成员的目的,需要采取一系列措施。更有甚者,javascript属于使用原型式继承的少数语言之一。利益于这种语言的灵活性,你既可使用标准的基于类的继承,也可使用更微妙一些的原型式继承。

2、为什么需要继承&#;

一般来说,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合。使用继承符合前一个设计原则的需要。借助这种机制,你可以在现有类的基础上进行设计并充分利用它们已经具备的各种方法,而对设计进行修改也更为轻松。假设你需要让几个类都拥有一个按特定方式输出类结构的toString()方法,当然可以用复制加粘贴的办法把定义toString()方法的代码添加到每一个类中,但这样做的话,每当需要改变这个方法的工作方式时,你将不得不在每一个类中重复同样的修改。反之,如果你提供了一个ToStringProvider类,然后让那些类继承这个类,那么toString这个方法只需在一个地方声明即可。

让一个类继承另一个类可能会导致二者产生强耦合,也即一个类的依赖于另一个类的内部实现。我们将讨论一些有助于避免这种问题的技术,其中包括用掺元类为其他类提供方法这种技术。

3、基于类的继承

下面看下面的代码:

输出结果: 张三 , 可以看到Student成功集成了Person,并且拥有了Person的say方法,核心代码其实就是一句 Student.prototype = new Person();,下面通过图解来说明原理:

学习JavaScript设计模式(继承)(javascript怎么学)

将Student.prototype指向new Person() , new Person的_proto_又指向Person Prototype;这样完成了整个继承。

但是这种方式存在问题:

问题1:当父类存在引用类型变量时,造成数据不一致,下面我们给Person添加一个hobbies属性,类型为数组。

输出结果:张三 , , soccer 李四 , , soccer,girl 可以看出,李四的hobbies应该只有girl,但是上面的代码让所有对象共享了hobbies属性。 上述的继承方式还存在一个问题:

问题2:在Student的构造方法中,无法使用new Student(“” , “张三” , ) ;创建对象,并初始化name和age属性,必须stu.name, stu.age进行赋值

为了解决上述问题,对上述代码进行修改:

输出: , 张三 , soccer , 李四 , cangjin,basketball 在Student的构造方法中使用了Person.call(this,name,age)感觉就像super(name,age)【call的第一个参数为上下文】;并且成功解决了对引用属性的共享问题,完美解决。

4、基于原型链的继承

输出:zhangsan , , Java lisi , , Java,Javascript 可以看出同样存在引用属性不一致的问题,并且整个操作全部基于对象,给人的感觉不是很好,下面通过图解解释下原理:

对象间通过一个clone函数,不断的返回一个新的对象,且prototype执行传入的对象,整个继承过程其实就是_proto_不断的指向,形成一个链,所以叫做原型链。

好了,已经介绍完了,js的两种集成的方式,最好使用的还是通过类的继承,比较稳定。

标签: javascript怎么学

本文链接地址:https://www.jiuchutong.com/biancheng/386287.html 转载请保留说明!

上一篇:js图片跟随鼠标移动代码(js鼠标滚动控制图片缩放)

下一篇:学习JavaScript设计模式(链式调用)(javascript教程chm)

  • 商业写字楼
  • 印花税购销合同减半征收政策
  • 做了进项税转出后要结转么
  • 月利润报表怎么制作
  • 增值税税差怎么算
  • 红字信息表已核销不允许撤销
  • 企业销售使用过的固定资产
  • 销售自用旧机动车辆的税务处理
  • 超额投资是什么意思
  • 产生的信息服务有哪些
  • 什么时候应做资产减值准备?
  • 折扣折让红字发票内容
  • 股权收购的好处
  • 企业全额承担社保怎么算
  • 工地运输费是什么费用
  • 社保企业二次扣款怎么扣
  • 提供部分原料的英文
  • 企业个人完税证明怎么开
  • 什么公司不需要融资
  • 已抵扣发票丢失如何处理
  • 小规模纳税人代账多少钱一个月
  • 进项税额转出的会计分录
  • 印花税年度申报表怎么填
  • 无票收入报税后,后期又开票出去怎么处理?
  • 如何核算卷烟消费税税率?
  • mac app store一直转圈圈
  • 怎么注销win10系统
  • win11怎么关闭系统自动更新
  • 税控盘减免税款结转会计分录
  • 哪些固定资产不会随着时间的流逝贬值
  • 第三方支付销售
  • windows11ie
  • 应收账款 预收账款合并
  • 未办理土地使用权证房屋买卖 案例
  • 进程aissca.exe
  • 债券到期收回本息计算单
  • windows11自带录屏怎么使用
  • 存货跌价准备是负数表示什么
  • vue设置宽度
  • 股权收购印花税填哪里
  • 固定资产折旧的计算方法
  • 印花税应计入哪些费用
  • 预付账款的会计处理
  • 动态sql怎么执行
  • 织梦设置的关键词看不到
  • 一般户可以付款吗
  • 收入总额是什么意思
  • 电脑买回来可以直接用吗
  • 企业应纳税所得额的计算原则
  • 金税盘数据迁移到税务ukey
  • 个税适用税率怎么确定
  • 个人所得税规定的免纳个人所得税的范围
  • 企业现金清查的主要内容有什么
  • 知识产权申请如何申请
  • 2018年所得税税收优惠
  • 信息服务费也有滞纳金吗
  • 公对公房产过户
  • 进项发票已经认证,对方作废了
  • 托管服务费开什么发票
  • 参加会议正常应该交多少钱
  • 进项发票已认证未抵扣分录
  • 企业在计划内应生产的工业产品
  • centos怎么添加用户
  • tcpip. sys
  • 主板升级bios失败怎么办
  • windows8 如何关机
  • WIN10怎么彻底删除works2
  • win7打开软件速度没有win10快
  • cocos2d-x 3.4 windows 环境配置
  • unity开发用什么电脑比较好
  • js中日期格式转换
  • data命令
  • unity增加组件
  • bootstrap-
  • jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
  • 个人所得税自行纳税申报表a表填写模板
  • 处室岗位是什么意思
  • 请问报考国家税务局难吗
  • 注册会计师人员名单
  • 两税法的历史解释
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设