深入解析 ES6 的继承
学习,就是不断推翻原有知识体系,跳出去建构更庞大的体系的一个过程。期间越是觉得迷惑不解,越是说明你掌握了新的东西。
今天看到一篇文章,博主遇到了如何继承 Date 对象的问题。博主很优秀,讲了好几个如何实现例子,但是文章看的我很迷糊。我觉得重点不是如何去实现,而是去明白产生问题的根源,所以有了这篇博客,从我认为可以理解的角度讲一讲。
之前写了一篇博客讲了如何用 es5 实现 Class 的继承,有兴趣可以看看 ES6 Class 的原生写法
一、问题产生背景
首先,我们要知道在 ES5 中,原生构造函数是无法继承的。
ECMAScript 的原生构造函数大致有下面这些:
Boolean()
Number()
String()
Array()
Date()
Function()
RegExp()
Error()
Object()
然而 ES6 却允许使用 extends 继承原生构造函数定义子类。
二、问题的根源
ES5 与 ES6 在继承上是有区别,而又通过原生构造函数的某个特殊性质,导致他们显现不同的状态。
所以我们要先弄清楚原生构造函数的特殊性,再看继承的不同表现
(1)原生构造函数特殊性: this 无法绑定
原生构造函数无法强制绑定 this
例子: