前不久写了有关原型链中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行发生如下过程:

     

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

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

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

最终的结果就是:

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

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

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

原型链继承中的prototype、__proto__和constructor的关系的更多相关文章

  1. JavaScript的原型链继承__propt__、prototype、constructor的理解、以及他们之间相互的关系。

    回想自己已经工作了有一段时间了,但是自己对JavaScript的原型链.和继承的理解能力没有到位,最近他们彻底的整理并且复习了一遍. 本案例中部分文案来自网络和书籍,如有侵权请联系我,我只是把我的理解 ...

  2. javascript中继承(一)-----原型链继承的个人理解

    [寒暄]好久没有更新博客了,说来话长,因为我下定决心要从一个后台程序员转为Front End,其间走过了一段漫长而艰辛的时光,今天跟大家分享下自己对javascript中原型链继承的理解. 总的说来, ...

  3. prototype原型链继承

    依旧是恶补js基础,上代码: 1.定义父类及父类方法 function Animal(){ this.name = "动物"; } Animal.prototype.eat = f ...

  4. javascript原型链继承

    一.关于javascript原型的基本概念: prototype属性:每个函数都一个prototype属性,这个属性指向函数的原型对象.原型对象主要用于共享实例中所包含的的属性和方法. constru ...

  5. js原型链+继承 浅析

    名称:    prototype--原型对象    __proto__--属性 原型链与继承网上搜索定义,看起来挺绕的 .先说继承: 所有的对象实例都可以共享原型对象包含的属性和方法  例如一个实例A ...

  6. 三张图搞懂JavaScript的原型对象与原型链 / js继承,各种继承的优缺点(原型链继承,组合继承,寄生组合继承)

    摘自:https://www.cnblogs.com/shuiyi/p/5305435.html 对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与__pro ...

  7. js原型链继承的傻瓜式详解

    本文争取用最简单的语言来讲解原型链继承的OOP原理 0.如果对原型继承还没有大致了解,完全一头雾水,请先阅读 <JavaScript高级程序设计>第六章最后部分的寄生组合式继承 或者_廖雪 ...

  8. js原型链理解(2)--原型链继承

    1.原型链继承 2.constructor stealing(构造借用) 3.组合继承 js中的原型链继承,运用的js原型链中的__proto__. function Super(){ this.se ...

  9. JavaScript之原型链与原型链继承

    原型链 定义:每个实例对象(object)都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype).该原型对象也有一个自己的原型对象(__proto__),层层 ...

随机推荐

  1. 把 Reative Native 47 版本集成到已有的 Native iOS 工程中

    一.搭建开发环境 http://reactnative.cn/docs/0.46/getting-started.html#content 二.创建一个模板 运行以下命令,创建一个最新版本的 reac ...

  2. django 运行报错汇总

    记录自己在使用django开发过程中遇到的问题,不间断更新. (1) 独立运行普通Python脚本调用django中定义的类报错 报错信息: django.core.exceptions.Improp ...

  3. 3.2 Multi-Master Replication

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  4. leetcode-686-Repeated String Match(重复多少次A能够找到B)

    题目描述: Given two strings A and B, find the minimum number of times A has to be repeated such that B i ...

  5. MarkDown添加图片的三种方式

    插图最基础的格式就是: ![Alt text](图片链接 "optional title") Alt text:图片的Alt标签,用来描述图片的关键词,可以不写.最初的本意是当图片 ...

  6. 生成allure测试报告之后,服务器端口无法访问查看生成的report,可能是这样引起的。

    1. 检查防火墙 2. 如果机器有安装ADsafe,请关闭adsafe后重试

  7. 利用CompletableFuture优化程序的执行效率

    一.线程池的Future模式 在了解java8的CompletableFuture之前,先通过Future来解决一个问题,看个例子: 假设现在有一个网站,首页有顶部Banner位.左边栏.右边栏.用户 ...

  8. 厉害了,七牛云 CEO 来讲架构了!

    说起许式伟,你应该不陌生,他是七牛云的CEO,ECUG 社区发起人,国内 Go 语言圈的领军人物,曾就职于金山.盛大,有超过 10 年的搜索和分布式存储相关技术的研发经验. 他的个人经历颇为传奇,大学 ...

  9. android samsung note3  device not found

    descriptiong : android  samsung note3 device not found solution: usb link by PTP, DONE! (be curiosly ...

  10. Q221 最大正方形

    在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 cla ...