博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JS第28期】继承-借用构造函数
阅读量:6967 次
发布时间:2019-06-27

本文共 959 字,大约阅读时间需要 3 分钟。

上期我们介绍了下原型链,知道了它潜在的问题,我们这期运用借用构造函数来解决上期遗留问题。回顾以下:

上期遗留问题

  1. 包含引用类型的原型属性会被所有实例共享,因此,我们如果一个实例中修改了这个原型属性,那么,其他实例的对应属性也会改变
  2. 在创建子类型的实例时,不能向父类构造函数中传递参数。

我们是否可以在子类型构造函数的内部调用父类的构造函数?了解apply()、call()方法的应该知道,这两个方法可以在新创建的对象上执行构造函数。因此我们可以做如下处理:

function SuperType() {  this.colors = ['red', 'blue', 'green'];}function SubType() {  // 继承SuperType  SuperType.call(this);}var instance1 = new SubType();instance1.colors.push('black');console.log(instance1.colors) // 'red', 'blue', 'green', 'black'var instance2 = new SubType()console.log(instance2.colors) //  'red', 'blue', 'green'复制代码

通过调用call() 方法,我们会在SubType的每个实例中都会创建一个colors的副本。

第一个问题解决了,那么我们考虑下第二个问题,我们知道call(),第一个参数为一个对象,第二个参数为给当前对象传参。那么我们是否可以考虑如下修改:

function SuperType(name) {  this.name = name;}function SubType() {  // 继承SuperType  SuperType.call(this, 'bill');}var instance = new SubType()instance.name // bill复制代码

借用构造函数的问题

  • 方法定义在构造函数中,方法无法复用

如有侵权,请发邮箱至wk_daxiangmubu@163.com 或留言,本人会在第一时间与您联系,谢谢!!

长按二维码关注我们,了解最新前端资讯

转载地址:http://jfssl.baihongyu.com/

你可能感兴趣的文章
关于nginx优先级问题
查看>>
Jpchina博客
查看>>
使用手机作单反相机的遥控器
查看>>
finally的用法,拦截器是Struts2的核心,异常处理
查看>>
解决linux系统CentOS下调整home和根分区大小
查看>>
PHP基础教程 常见PHP错误类型及屏蔽方法
查看>>
负载均衡,NAT,ACL,VTP,DHCP,热备份,路由OSPF
查看>>
在Windows下如何创建虚拟环境(默认情况下)
查看>>
cwiki-us-angular-app 导入后如何添加到自己的项目
查看>>
DataPipeline |Apache Kafka实战作者胡夕:Apache Kafka监控与调优
查看>>
多线程设计模式:第五篇 - Future模式和两阶段终止模式
查看>>
linux下如何关闭已登录用户
查看>>
我的友情链接
查看>>
unix基础教程9 标准I/O
查看>>
zabbix中通过shell脚本进行微信监控告警
查看>>
sed运用实例一——基于变量的动态替换
查看>>
Html 常见问题
查看>>
GitHub十周岁HanLP自然语言处理包用户量超越CoreNLP
查看>>
Pycharm上Django的使用 Day2
查看>>
5.22-zabbix监控Nginx
查看>>