JS 继承--原型链

Apr 30, 2019 5:06·366 words ·1 minutes read

  • ECMAScript 只支持实现继承,而且其实现继承主要依靠原型链来实现

  • 什么是原型链?

    • 基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法
  • 构造函数、原型和实例的关系:

    • 每个构造函数都有一个原型对象
    • 原型对象都包含一个指向构造函数的指针
    • 实例都包含一个指向原型对象的指针

假如我们让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针;假如另一个原型对象又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条,这就是所谓的 原型链

  • 例子:

    • SuperType 是父类
    • SubType 是子类
    • 链接方法:
        SubType.prototype = new SuperType();
      
    • instance 是子类的实例
    • 于是 instance 的构造函数(instance.constructor)现在指向的是 SuperType ,因为这相当于重写了 SubType 的原型。因此,当调用 instance.constructor 时,会沿着原型链向上寻找,当找到 SubType 的原型指向的 SuperType 的原型时,发现 SuperType 的原型的 constructor 属性指向的是 SuperType 构造函数
  • !注意:

    • 在通过原型链实现继承是,不能使用对象字面量创建原型方法。因为这样做就会重写原型链