位置: 编程技术 - 正文

js类式继承的具体实现方法(js类继承的几种方式)

编辑:rootadmin

在开始摆弄代码之前,应该搞清楚使用继承的目的和能带来什么好处。一般来说,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化类之间的耦合。而要做到这两者都兼顾是很难的,我们需要根据具体的条件和环境下决定我们应该采取什么方法。根据我们对面向对象语言中继承的了解,继承会带类直接的强耦合,但js由于其特有的灵活性,可以设计出强耦合和弱耦合,高效率和低效率的代码。而具体用什么,看情况。

下面提供js实现继承的三种方法:类式继承,原型继承,掺元类。这里先简述类式继承,后两种在往后的随便中简述,请多多关注、指导,谢谢。

类式继承。

js类式继承的实现依靠原型链来实现的。什么是原型链?js中对象有个属性prototy,这个属性返回对象类型的引用,用于提供对象的类的一组基本功能。

貌似对prototype有印象,对了,我们经常这样用代码。

我们把类的基本功能放在prototype属性里,表示Person这个对象的引用有XXX功能。

在理解原型后,需要理解下什么是原型链。在访问对象的某个成员(属性或方法)时,如果这个成员未见于当前对象,那么js会在prototype属性所指的那个对象中查找它,如果还没有找到,就继续到下一级的prototype所指的对象中查找,直至找到。如果没有找到就会返回undifined。

那么原型链给我们什么提示呢?很容易联想到,原型链意味着让一个类继承另一个类,只需将子类的prototype设置为指向父类的一个实例即可。这就把父类的成员绑定到子类上了,因为在子类上查找不到某个成员时会往父类中查找。(以上这两段用词不严谨,只在用通俗易懂的言语描述)

下面我们需要个Chinese类,需要继承Person类的name和getName成员。

继承关系就建立了,我们这样调用它

于是类式继承就这样完成了。难道真的完成了嘛,用firebug在alert那里设断点,会发现原来的Person.prototype被修改了,添加了getNation方法。

这是因为在上面的代码Chinese.prototype = Person.prototype; 这是引用类型,修改Chinese同时也修改了Person。这本身就是不能容忍的,且使类之间形成强耦合性,这不是我们要的效果。

我们可以另起一个对象或实例化一个实例来弱化耦合性。

这两种方法有什么区别呢。在第二种中添加了一个空函数F,这样做可以避免创建父类的一个实例,因为有可能父类会比较庞大,而且父类的构造函数会有一些副作用,或者说会执行大量的计算任务。所以力荐第二种方法。

到此,完了嘛,还没有!在对象的属性prototype下面有个属性constructor,它保存了对构造特定对象实例的函数的引用。根据这个说法Chiese.prototype.constructor应该等于Chinese,实际上不是。

回忆之前在设置Chiese的原型链时,我们把Person.prototype 覆盖掉了Chiese.prototype。所以此时的Chiese.prototype.constructor是Person。我们还需要添加以下代码

整理全部代码如下

如果可以把继承的代码放在一个函数里,方便代码复用,最后整理代码如下

发表后修改:

在一楼的评论下,我对那个extend函数又有新的看法。之前在讨论如何设置原型链时提出了两种方法

虽然第二种减少了调用父类的构造函数这条路,但在设计Chinese类时用了Person.call(this,name);这里也相当于调用了父类的构造函数。

然而用第一种方法的话可以减少在Chinese中再写Person.call(this,name);,这部分代码在子类中往往会遗忘。不妨把这种功能代码放在了extend里。就只写

Chinese.prototype = new Person();也达到同样的目的:耦合不强。

但遗忘的一点是,Chinese.prototype = new Person();这样写对嘛。答案是不对!很明显 new Person()需要传一个name参数的。我们不可能在extend函数里做这部分工作,只好在Chinese类里调用父类的构造函数了。这样也符合面向对象的思路。

所以,还是力荐用第二种方法。

第一次这样写有关技术类的文章,基本是按自己的思路铺展开来,难免会有一些没有考虑到的地方和解释的不清楚的地方,望留言反馈,谢谢。

推荐整理分享js类式继承的具体实现方法(js类继承的几种方式),希望有所帮助,仅作参考,欢迎阅读内容。

js类式继承的具体实现方法(js类继承的几种方式)

文章相关热门搜索词:js中类继承的关键字是,js 类继承,js中类继承的关键字是,js继承方式有哪些,js类继承的几种方式,js 类继承,js中类继承的关键字是,js类继承的几种方式,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript中Math对象方法使用概述 1.丢弃小数部分,保留整数部分parseInt(5/2)2.向上取整,有小数就整数部分加1Math.ceil(5/2)3,四舍五入.Math.round(5/2)4,向下取整Math.floor(5/2)Math对象的方法FF:Firefox,N:

JS中Date日期函数中的参数使用介绍 要创建一个一个日期对象,可以使用以下的方式:varnow=newDate()当然,函数中没有传递任何参数,表示此对象now自动获取了当前的时间。如果想要创建一

ParseInt函数参数设置介绍 我们经常用ParseInt函数转换字符串为int数值,ParseInt函数有两个参数可以设置,其中第二个参数可以缺省。ParseInt("字符串",使用的进制)varnum1=ParseInt("",2)

标签: js类继承的几种方式

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

上一篇:javascript操作css属性(怎样用在js中使用css的内容)

下一篇:JavaScript中Math对象方法使用概述(javascript中math.ceil)

  • 一般纳税人每个月需要报哪些税
  • 企业投资收益要开发票吗
  • 发票报销哪些要素不能少
  • 工会基金是扣个人还是扣企业的
  • 二房东转租需要备案吗
  • 营业成本增加会导致
  • 企业注销的时候未分配利润怎么处理
  • 企业的房屋是否能确认为存货?为什么?(简单描述即可)
  • 企业最应避免的外部环境和内部条件组合是
  • 补计提去年的折旧该怎么做账
  • 税务局加强企业所得税管理
  • 公司多久不做账会被注销?
  • 投资收益会计处理
  • 税局代个人开增值税专票
  • 建筑业开具发票新规定
  • 金税四期有什么变化
  • 营业外收入可以在借方吗
  • 建筑安装工程费用人工费计算方式
  • 当月认证下月抵扣
  • 建筑企业法定代表人和建筑公司资质不是一个人
  • 会员卡系统多少钱一套
  • 发票上月开本月到账要交企业所得税吗?
  • 企业成本费用包含
  • 抄税和申报是一回事吗
  • 预付账款如何计提折旧
  • mac如何改变用户名
  • 交了车船税有什么凭证
  • 民间借贷以工资抵押的案例
  • 台式电脑机箱怎么选
  • 电脑一开机一会一会黑屏
  • 股权转让定金怎么退回
  • 十个php高级应用题
  • 长期债券投资减少是计入贷方吗?
  • 哪些费用需要计提,哪些不需要
  • 企业常见的筹资方式有几种
  • 偷税行为五年后被发现要接受行政处罚吗?
  • 固定资产生产经营期间正常报废产生的净收益
  • 日本蜡烛图形
  • 华为od测试岗机试需要怎么准备
  • fasternet高效上采样模块
  • 长期待摊费用是什么科目
  • 贸易企业开发下游业务
  • 不动产固定资产清理
  • 公司一年没有业务
  • 企业对外报送的财务报表
  • 1000左右打印机
  • 银行存款日记账怎么记账
  • 织梦自适应代码怎么做
  • webpack怎么优化
  • sqlserver怎么把数据库导出来
  • MicrosoftSQLserver2014
  • PureFTP借助MySQL实现用户身份验证的操作教程
  • 土石方费用入什么科目
  • 土增尾盘销售应该如何申报收入
  • 使用sqlserver创建数据库和删除数据库的实验总结
  • 税务师工作年限证明材料
  • 残保金工资总额是按计提还是发放
  • 预计销售收入增长率怎么算
  • 在固定资产下的折旧年限
  • 电脑买了四个月折旧多少
  • 如何填写出售固定资产表
  • 房地产企业房屋私售,银行怎么处理
  • mac自动操作怎么停止
  • xp移动系统
  • linux常见压缩工具
  • centos中netspeeder网络加速/优化器的安装方法
  • Linux中RedHat CentOS Ubuntu Fedora的区别详解
  • win8找不到恢复环境怎么恢复出厂设置
  • win10系统无法启动
  • win8新建用户
  • extjs grid设置某列背景颜色和字体颜色的方法
  • 你将会收藏
  • 怎么做小地图
  • js开发组件
  • python listnode
  • javascript中的函数该如何理解
  • 浙江国税qzzn
  • 信息技术税务分类编码
  • 陕西地税发票怎么重新打印
  • 如何优化企业的筹资结构
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设