[重要]继承的进化过程

198 阅读1分钟

概述

JS本身是没有类的概念的,有的只是原型链。

当调用对象属性时,会从对象本身查找,如果查找不到就通过__proto__属性向该对象原型上查找。

如此返回,直至查询到Object的原型

按照这种规则,我们就可以实现继承操作

按照规范,不要使用__proto__属性查找对象的原型,统一使用Object.getPrototypeOf()

原型链最顶层是Null

Object.getPrototypeOf(Object.getPrototypeOf(new Object()))
// null

构造函数的构造函数就是Function,这样操作无意义。

Function.constructor === Function
// true

继承的具体实现

要实现继承首先要满足 子类 继承 父类 的属性和方法

关于具体实现,请点击跳转

Javascript面向对象编程(二):构造函数的继承

学习总结:

  1. 非构造继承不适用,会出现很多问题。请忽略非构造继承篇

  2. 目前唯一正确标准的继承实现是使用Object.create()方式的继承

  3. 各种实现方法都有优缺点

    具体优缺点,请参考【JS实现继承的几种方式

  4. Object.create()的实现方式

    Object.create =  function (o) {
      var F = function () {};
      F.prototype = o;
      return new F();
    };
    
  5. 为了代码可读性,请使用ES6的class操作符写法!!!!