• 原型链继承中的prototype、__proto__和constructor的关系


    前不久写了有关原型链中prototype、__proto__和constructor的关系的理解,这篇文章说说在原型链继承中的prototype、__proto__和constructor的关系。

    通过以下最简单的原型链继承(省略了属性和方法)来讨论:

     1 function SuperType(){};
     2 function SubType(){};
       //继承了SuperType
     3 SubType.protoType = new SuperType();
       //创建了一个SubType的实例
     4 var instance = new SubType();

    1)根据原型链中prototype、__proto__和constructor的关系这篇文章的讲解,我们可以很快知道以上代码中第1行和第2行发生如下过程:

    image     image

    2)接着,看第3行代码,我们先不管如何继承。第3行代码通过调用构造函数SuperType()创建了一个实例,并把这个实例赋给乐SubType的原型对象SubType.prototype;如果弄懂了原型链,我们可以很快知道这个时候SubType的原型对象的__proto__指针指向SuperType的原型对象:

    image

    (此图是错误的,以下将讲解正确的过程及原因)

    3)按照之前讲的原型链知识,过程应该如上图所示。但这里有一点要注意,第3行代码实际上是重写了SubType的原型对象,也就是说现在的SubType原型对象和第2行代码中的SubType原型对象不是同一个对象了。那么此SubType的原型对象与SubType之间的联系constructor 属性就断开了,那它没有了自己的constructor属性,它就会从SuperType的原型对象那继承,所以SubType原型对象的constructor属性指向SuperType。过程可表示如下:

    image

    最终的结果就是:

    image

    console.log(SubType.prototype.constructor === SuperType);//true

    4)接着,第4行代码通过调用SubType()构造函数创建了一个实例instance,很自然instance的__proto__就指向了SubType的原型对象,而其constrcutor属性就继承SubType 原型对象的constrcutor属性,SubType 原型对象的constrcutor属性是继承自SuperType,那么instance的constructor就追溯到指向了SuperType。

    image

    console.log(SubType.prototype.constructor === SuperType);//true
      console.log(instance.constructor === SuperType);//true
  • 相关阅读:
    React Native之通知栏消息提示(ios)
    前端知识点总结(HTML)
    React Native之通知栏消息提示(android)
    微信QQ打开网页时提示用浏览器打开
    微信小程序开发的基本流程
    React Native之code-push的热更新(ios android)
    ES7的新特性
    如何将本地项目上传到码云
    找不到或无法加载主类(Could not find or load main class)
    Java代码操作HDFS
  • 原文地址:https://www.cnblogs.com/youhong/p/6840483.html
Copyright © 2020-2023  润新知