位置: 编程技术 - 正文

阿里巴巴技术文章分享 Javascript继承机制的实现(阿里巴巴技术文档翻译工资)

编辑:rootadmin

推荐整理分享阿里巴巴技术文章分享 Javascript继承机制的实现(阿里巴巴技术文档翻译工资),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:阿里巴巴技术文档好进吗,阿里巴巴技术文档,阿里巴巴最新技术,阿里巴巴 技术,阿里巴巴技术文员好做吗,阿里巴巴技术文档,阿里巴巴技术文档,阿里巴巴技术文档翻译工资,内容如对您有帮助,希望把文章链接给更多的朋友!

Javascript作为一门脚本语言,在设计之初并没有考虑到面向对象的特性。即便到了当今这个遍布现代浏览器的年代,各种Javascript 框架/库如雨后春笋般地疯狂生长,Javascript中连个 class 关键字都没有。如果你要编写一个类,你还得借助于function,至于继承、重载什么的,就别奢望了。

可是,没有继承,日子怎么过啊?难道把所有的共有逻辑都拷贝一遍,实现最低级的代码复用?

答案当然是——NO,所以,我们要自己实现继承!

目标

最关键的目标当然是继承——子类自动拥有父类的所有公共属性和方法。

支持instanceof,例如c是子类的实例,而P是父类,c instanceof P应该返回true。

其次应该能够重写(Override)父类的方法,并且在子类的方法中,能够方便地调用到父类的同名方法。

至于说重载(Overload),由于Javascript的语言特性(不可以有同名方法,即便它们参数列表不一样),无法实现。

设计与实现

Javascript的对象有一个很重要的属性——__proto__,也就是原型。原型实质上也是一个对象,所有它也可以有自己的原型,这样就形成一个原型链。当你调用某个对象的某个方法,或者读取该对象的某个属性,Javascript执行器是这样做的:

1、首先到该对象中找对应的方法或属性,如果找不到,2、到该对象的原型中找,如果还找不到,3、到原型的原型里面找4、...5、直到最后找到Object的原型为止,如果还没有则返回undefined如下图所示:

原型链的这个特性,和继承很相似,所以自然而然,我们可以利用它来实现继承机制。而原型链对instanceof的支持,使得它成为很好的选择。

我们定义extend函数,这个函数接受两个参数,第一个是父类,第二个是子类,如下所示:

这个函数对子类进行处理,并返回子类。处理的逻辑如下:

建立原型链

阿里巴巴技术文章分享 Javascript继承机制的实现(阿里巴巴技术文档翻译工资)

通过将子类的原型链与父类的原型链连接起来,子类可以自动拥有父类的方法和属性:

为了连接原型链,需要创建一个父类的实例,并将其赋给子类的原型属性。但我们不希望在extend方法里面就实例化父类,所以引入了一个中间类T,以解决这个问题。

实现重写

原型链建立之后,原来子类原型上的方法和属性我们也需要保留下来:

方法

如果父类有同名方法,我们使用一个闭包,来保留对父类方法和子类方法的引用。然后,修改新的原型中该方法的引用,将其指向一个新的 function。在这个function里面,我们创建一个临时属性super,将其指向父类方法,并调用子类方法,这样在子类方法中,通过 this.super可以调用该父类方法:

属性

对于属性,不存在重写的问题,所以直接将子类原来的原型中的属性加到新的原型中即可:

构造器

为了让子类能够访问到父类的构造器,我们将父类赋给子类的super属性:

如何使用

假设我们要设计一个管理系统,里面涉及到客户、工人和经理等。将客户和员工的共性抽象出来,我们得到人(People);然后将工人和经理的共性抽象得到员工(Employee)。这样我们得到三级类结构:

实现这个设计的代码如下:

我们希望对每个人都有一个描述,People是姓+名;员工在姓+名之后,还包括公司名称;而经理在员工的描述之后,还包括职位。代码如下:

在所有的成员方法都已经定义好之后,声明类的继承(必须先定义方法,再声明类的继承,否则无法在方法中使用this.super调用父类方法!):

使用这些类就比较简单,直接new就好了:

这篇文章不错吧,那就给个赞吧!

JavaScript对象参数的引用传递 今天碰到一个问题,怎样把参数变更影响到函数外部,如:scriptvarmyname="wood";A(myname);document.write(myname);functionA(n){n="Yao";}/script输出结果还是wood,说明当myn

JavaScript基本语法学习教程 Javascript的基本概念i.javascript语言是网页中广泛使用的一种脚本语言。ii.Javascript语言的特点:1.由Netscape公司开发,基于对象和事件驱动并具有一定安全

javascript检测flash插件是否被禁用的方法 本文实例讲述了javascript检测flash插件是否被禁用的方法。分享给大家供大家参考,具体如下:!doctypehtmlhtmllang="en"headmetacharset="UTF-8"metaname="Generator"content="

标签: 阿里巴巴技术文档翻译工资

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

上一篇:基于javascript实现随机颜色变化效果(javascript运用)

下一篇:JavaScript对象参数的引用传递(js对象的constructor)

  • 发票丢失第一联盖章能用么
  • 房产税计入管理费用了,汇算清缴怎么调
  • 原材料报废可以退税吗
  • 所得税汇算补提所得税会计分录
  • 动产租赁适用税率
  • 印花税的申报依据是什么
  • 非限定性净资产包括哪些科目
  • 企业所得税年报过了申报期还能修改吗
  • 建安企业核定征收税率多少
  • 水泥销售成本怎么算
  • 审计核减理由
  • 收到费用报销发票怎么做
  • 计提坏账递延所得税资产怎么算
  • 简易征收可以抵扣进项吗
  • 冲减成本费用会计分录
  • 简易分包抵减的增值税应纳税额怎么做会计分录?
  • 增值税发票做假什么后果
  • 出售无形资产属于让渡资产使用权吗
  • 买二手车转让费一般要多少钱
  • 工程和技术研究和试验发展
  • 盈余积累转增股本的个税问题
  • 开过去的普通发票多久不能冲红?
  • 药店 医保收入占比
  • 清华同方bios通用密码(thtfpc)
  • 加速折旧以后年度如何填报调减额
  • 每日盈亏报表怎么算
  • word文档不好用
  • php serialize()与unserialize() 不完全研究
  • 预缴增值税会产生滞纳金吗
  • 杜鹃花怎么养家庭养法视频
  • 计算土地增值税时增值额的扣除项目包括
  • 销售折让负数会计分录
  • 期权能套现吗
  • 会计分录编制的步骤
  • Win11 Build 22000.348更新补丁KB5007262预览版发布(附更新修复内容汇总)
  • 吃鸡显卡推荐配置1060 5g
  • 一般纳税人什么情况下可以开3%的税率
  • 如何防范增值税的税收风险
  • 销售商品的会计分录已收到钱
  • 发票多盖了一个发票章咋办
  • thinkphp assign函数
  • 固定资产处理步骤
  • 预缴季度企业所得税分录
  • 房屋土地使用权到期后续费标准
  • 以非现金资产清偿债务的,债权人应当
  • 金蝶软件利润表公式怎么设置
  • mysqli
  • 固定资产折旧率如何计算
  • 借款的帐务处理?
  • 税收类型增值税有哪些
  • 一般纳税人一直零申报会怎么样
  • 开具发票要注意方面是有哪些?
  • 合并设立是什么意思
  • 开出银行承兑汇票一张,面值30000元,用于抵付
  • 股息所得缴纳个税吗
  • 用于企业职工福利有哪些
  • 价外费用延期付款利息
  • 工程施工合同如何核算收入成本?
  • 城镇土地使用税征收范围
  • 拆迁房视同销售成本可以抵减吗?
  • 其他债权投资计提损失准备会引起资产总额增加吗
  • 事业单位会计制度
  • php的每条语句以什么结尾
  • 学会整理内容
  • win10升级电脑
  • .exe是什么意思
  • win7无权关闭计算机
  • win7系统怎样
  • jquery右击事件
  • .android
  • css div模糊
  • unity 扩展编辑器
  • js实现日历可获得的信息
  • cmd读取d盘
  • linux 网卡 配置
  • js判断字符串字符出现的次数
  • javascript web开发
  • 营业税金及附加结转分录
  • 个人所得税税单下载
  • 常设机构怎么缴纳所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设