位置: 编程技术 - 正文

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

发布时间:2024-02-27

推荐整理分享学习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)

  • 办公室电话费计入什么科目
  • 应付账款周转率和存货周转率公式
  • 增值税发票怎么抵扣
  • 2019年工会经费新规定
  • 出口企业免抵税额要作进项转出吗
  • 软件产品出口退税条件
  • 出口专用发票应在哪里开
  • 如何快速整理会计凭证
  • 技术转让费怎么定价
  • 中国公司外派美国工作
  • 房屋及建筑物原值计算
  • 纳税调整的情况
  • 投资性房地产处置时公允价值变动损益
  • 存货跌价准备转销
  • 公司培训餐费计入什么费用
  • 小规模需要交所得税吗
  • 2019年出租车
  • 疏通下水道入什么经络
  • 个体户酒店服务业个税税率
  • 劳务派遣公司的作用
  • 期末留抵税额退税是什么意思
  • 工程合同主要看什么
  • 苹果笔记本下载的itunes在哪
  • 纳税人如何申请延期缴纳税款
  • win10无法运行软件怎么回事
  • iphone6s显示4g却无法上网
  • win11怎么打开磁盘管理
  • typora修改背景颜色
  • zhp.exe是什么进程
  • 笔记本电脑盖上盖子就关机了吗
  • 主营业务利润率多少合适
  • 企业所得税退税流程
  • php验证身份证号
  • 小程序从入门到精通
  • 注意力机制的作用
  • vports命令怎么用
  • PHP中set_include_path()函数相关用法分析
  • 利用php生成静态数据
  • Laravel 5.1 on SAE环境开发教程【附项目demo源码】
  • 施工企业的人工费占比
  • 企业利润表列报项目有哪些
  • 上一年的运费发票怎么开
  • 代收代付进项税转出吗
  • 财务负责人和法人可以一个人吗
  • 缴税零申报
  • 调整以前年度损益调整什么时候结转
  • 资产负债表与利润表的关联性可在存货与销售成本
  • 库存现金银行存款用什么凭证
  • 成本核算的意义与作用
  • 折旧费用分摊科目是什么
  • 不动产初始登记证明
  • 航天信息税票
  • 车辆上牌的费用应付多少?
  • 公司向税务局缴纳税款
  • 发明专利权限的期限是多少年
  • 以旧换新会计科目
  • 出口退税计算公式
  • 成本法和权益法的转换
  • 会计制度和会计准则科目转换
  • 如何进行固定资产审计
  • 红字发票开出的单价可以比蓝字发票高吗?
  • win8开机logo
  • freebsd软件安装
  • wlms.exe是什么
  • PHP 7.0.0 Alpha 2 发布
  • windows7怎么解除密码
  • 邮箱应用程序
  • css百分比进度条
  • ExtJS如何设置与获取radio控件的选取状态
  • opengl点的绘制
  • jquery获取鼠标位置
  • Python内置函数的应用操作
  • python pyb库
  • 批处理系统定义
  • BaseAdapter数据刷新,自定义BaseAdapter
  • 贵州省 税务局
  • 社保申报截止日期每月2023年
  • 2016年小微企业所得税标准
  • 税法上接受捐赠是什么
  • 农转非和非农
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号