likes
comments
collection
share

图解指南:继承中的Prototype、__proto__与Constructor之间的关系

作者站长头像
站长
· 阅读数 56

前言

class extends继承

class Parent {}
class Children extends Parent {}
const child = new Children();

分析上面的代码,实例对象child, 构造函数有Children、Parent、Function;原型对象对应分别有Children.prototype、Parent.prototype、Function.prototype、Object.prototype;我们先不考虑function和Object,画出最基础的部分:

图解指南:继承中的Prototype、__proto__与Constructor之间的关系

任何函数都可以看做是通过Function()构造函数new操作实例化的结果 我们把Function加上,这里要注意一个特殊指向 Function.__ proto__ 指向 Function.prototype

图解指南:继承中的Prototype、__proto__与Constructor之间的关系

所有的对象都可以看成是Object()构造函数new操作的实例化结果 我们加上Object

图解指南:继承中的Prototype、__proto__与Constructor之间的关系

Object.create类式继承

使用Object.create类式继承会有什么不一样呢?

function Parent() {}
function Children() {}
Children.prototype = Object.create(Parent.prototype);
const child = new Children();
  1. Children 构造函数及其实例的 constructor 指向会变成 Parent。
  2. Parent的静态方法和属性不会自动继承,只会继承 Parent 原型链上的属性和方法。
  3. Children 构造函数在原型链上不会继承 Parent 构造函数(当然在大多数情况下,我们不关心它而是关心实例的原型链)

图解指南:继承中的Prototype、__proto__与Constructor之间的关系

如果文章对你有帮助,请先点赞再收藏哦!

参考文章

undefined与null的区别

如何回答面试中的JavaScript原型链问题

转载自:https://juejin.cn/post/7360946080865976355
评论
请登录