继承(详解)

继承

在 ES5 中,我们可以使⽤如下⽅式解决继承的问题

function Super() {}
Super.prototype.getNumber = function() {
return 1 }
function Sub() {}
let s = new Sub()
Sub.prototype = Object.create(Super.prototype, {
constructor: {
value: Sub,
enumerable: false,
writable: true,
configurable: true
} })

以上继承实现思路就是将⼦类的原型设置为⽗类的原型 在 ES6 中,我们可以通过 class 语法轻松解决这个问题

class MyDate extends Date {
 test() {
 return this.getTime()
 } }
let myDate = new MyDate()
myDate.test()

但是 ES6 不是所有浏览器都兼容,所以我们需要使⽤ Babel 来编译这段代码。 如果你使⽤编译过得代码调⽤ myDate.test() 你会惊奇地发现出现了报错

因为在 JS 底层有限制,如果不是由 Date 构造出来的实例的话,
是不能调 ⽤ Date ⾥的函数的。所以这也侧⾯的说明了:
 ES6 中的 class 继承与ES5 中的⼀般继承写法是不同的。

既然底层限制了实例必须由 Date 构造出来,那么我们可以改变下思路实现继承

function MyData() { }
MyData.prototype.test = function () {
 return this.getTime() }
let d = new Date()
Object.setPrototypeOf(d, MyData.prototype)
Object.setPrototypeOf(MyData.prototype, Date.prototype)

以上继承实现思路:先创建⽗类实例 => 改变实例原先的 proto_ 转⽽连接到⼦类的
prototype => ⼦类的 prototype 的 proto 改为⽗类的 prototype 。
通过以上⽅法实现的继承就可以完美解决 JS 底层的这个限制
每天一句中文式外语
俄语

银行在哪里?
哥姐,bank ?
电话亭在哪里?
 哥姐,姐累疯了?
哥姐是表示 哪里? 银行就是英语bank。 电话是姐累疯了

ATT:学习一门外语一定要敢说,要有语言环境,最好是有语伴。我之前也是不敢开口说,后来在国外生活两年,酒吧撩妹的时候,只要你敢说,就能勾搭到国外的小姐姐或小哥哥,记住:大家都是人,都是对老外有好奇心的(老外也是这么想的!)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eugene.Tom.Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值