点击蓝字 关注我们
内容来源于掘金:单程线_01(黄灿民),别忘记看文末福利~
JavaScript 的继承是通过原型链实现的,要实现继承需要理解原型和原型链的概念。
原型和原型链
1、仅函数上存在 prototype 属性(这是一个显式原型属性),其指向原型对象,原型对象上存在两个属性:constructor 和 [[prototype]] (无法访问,部分浏览器可通过 __proto__
访问,这是一个隐式的原型属性);
constructor :指向构造函数,即是函数自身
[[prototype]](
__proto__
):指向构造函数的原型对象,即 Object ,Object.__proto__ = null
2、当通过 new 调用这个函数时,得到的对象会存在 [[prototype]](__proto__
),指向的是函数的 prototype 属性;
3、所有的对象上都存在 [[prototype]](__proto__
)属性;
4、这种通过 __proto__
在各对象间建立链接的工具就是原型链,通过原型链可以访问到其他对象的属性和方法。
继承的实现方式
继承指一个对象直接使用另一对象的属性和方法。JavaScript 的继承是通过原型链实现的。
实现属性继承的核心代码是 SuperFn.call(this)
,实现方法继承的核心代码是 SubFn.prototype.__proto__ = SuperFn.prototype
,具体实现方式有以下6种:
1、ES6 class 类 extends 继承
通过 ES6 新增的语法糖实现继承。
class SuperClass {
constructor(name) {
this.name = name || 'super';
this.arr = [1, 2];