对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与__proto__混淆,二来它们之间的各种指向实在有些复杂,其实市面上已经有非常多的文章在尝试说清楚,有一张所谓很经典的图,上面画了各种线条,一会连接这个一会连接那个,说实话我自己看得就非常头晕,更谈不上完全理解了。所以我自己也想尝试一下,看看能不能把原型中的重要知识点拆分出来,用最简单的图表形式说清楚。

我们知道原型是一个对象,其他对象可以通过它实现属性继承。但是尼玛除了prototype,又有一个__proto__是用来干嘛的?长那么像,让人怎么区分呢?它们都指向谁,那么混乱怎么记啊?原型链又是什么鬼?相信不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,下面用三张简单的图,配合一些示例代码来理解一下。

一、prototype和__proto__的区别

var a = {};
console.log(a.prototype);  //undefined
console.log(a.__proto__);  //Object {}var b = function(){}
console.log(b.prototype);  //b {}
console.log(b.__proto__);  //function() {}

/*1、字面量方式*/
var a = {};
console.log(a.__proto__);  //Object {}console.log(a.__proto__ === a.constructor.prototype); //true/*2、构造器方式*/
var A = function(){};
var a = new A();
console.log(a.__proto__); //A {}console.log(a.__proto__ === a.constructor.prototype); //true/*3、Object.create()方式*/
var a1 = {a:1}
var a2 = Object.create(a1);
console.log(a2.__proto__); //Object {a: 1}console.log(a.__proto__ === a.constructor.prototype); //false(此处即为图1中的例外情况)

var A = function(){};
var a = new A();
console.log(a.__proto__); //A {}(即构造器function A 的原型对象)
console.log(a.__proto__.__proto__); //Object {}(即构造器function Object 的原型对象)
console.log(a.__proto__.__proto__.__proto__); //null

https://www.cnblogs.com/shuiyi/p/5305435.html

三张图搞懂JavaScript的原型对象与原型链相关推荐

  1. java 原型图_一张图搞懂原型、原型对象、原型链

    基本概念 在javascript中,函数可以有属性. 每个函数都有一个特殊的属性叫作原型(prototype) 每个对象拥有一个原型对象 [[Prototype]] / __proto__ / Obj ...

  2. 一张图搞懂Spring bean的完整生命周期

    转载自 一张图搞懂Spring bean的完整生命周期 一张图搞懂Spring bean的生命周期,从Spring容器启动到容器销毁bean的全过程,包括下面一系列的流程,了解这些流程对我们想在其中任 ...

  3. 【笔记】三张图读懂机器学习:基本概念、五大流派与九种常见算法

    文章目录 [笔记]三张图读懂机器学习:基本概念.五大流派与九种常见算法 Chapter 1: A look at Machine learning 1.What is it? 2.How does m ...

  4. 【科普干货】3张图搞懂Salesforce的认证体系(附新手考证攻略)

    Salesforce.com,这家神一般的公司及其产品我就不多说了,需要了解的可以阅读我的另一篇科普文章<一张图读懂Salesforce的产品架构>. 今天给大家带来另一篇关于Salesf ...

  5. 4张图搞懂Salesforce的认证体系(附新手考证攻略)

    Salesforce认证计划概述 最近这一两年,Salesforce的Trailhead和认证太热门了,小伙伴们前赴后继地刷Badge拿认证,可以考的认证也随着产品家族的增加而增加,从十几年前的几个认 ...

  6. 3张图搞懂Salesforce的认证体系

    今天给大家带来另一篇关于Salesforce认证考试的科普文章. [Salesforce认证计划概述] 最近这一两年,Salesforce的Trailhead和认证太热门了,小伙伴们前赴后继地刷Bad ...

  7. 一张图搞懂js原型链

    1.原型.原型链 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象(原型对象).使用原型的好处是让所有对象实例共享(继承)它所包含的属性和方法. 2. ins ...

  8. 5张图搞懂Java深浅拷贝

    微信搜一搜 「bigsai」 关注这个专注于Java和数据结构与算法的铁铁 文章收录在github/bigsai-algorithm 欢迎star收藏 如果本篇对你有帮助,记得点赞收藏哦! 在开发.刷 ...

  9. 一张图搞懂微服务架构设计

    前言 当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件.不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只懂搬砖的程序员不是一个好码农! ...

最新文章

  1. 优酷智能档在大型直播场景下的技术实践
  2. 【基础算法】二分法(二分答案,二分查找),三分法,Dinkelbach算法,算法详解+例题剖析
  3. HDU 1036 Average is not Fast Enough!:题目解答源码
  4. QT设置坐标轴XY轴显示范围方法
  5. 抖音之后,互联网失去创造力
  6. IOC操作Bean管理XML方式(xml自动装配)
  7. 对计算机专业的认识500字_【热门】我的朋友作文500字4篇
  8. Xposed 框架检测机制
  9. sql server 2008r2安装注意的问题
  10. 第1章 Android编程入门
  11. 华为atn950b指导手册_全新原包装华为ATN950B 整机 传输设备
  12. 16G DWDM SFP+光模块特性及解决方案
  13. HTML中使用a标签实现文本内链接—零基础自学网页制作
  14. 惯性导航技术, IMU, AHRS
  15. SAP cash discount 现金折扣
  16. android打开sd卡文件,从Android中的SD卡读取特定文件
  17. Layui使用入门教程
  18. 此工作站和主域间的信任关系失败 原因及解决办法
  19. 【行业交流】后勤管理信息化的需求
  20. 抖音上用计算机表白,抖音里表白的句子合集

热门文章

  1. linux中循环删除脚本,shell脚本:遍历删除
  2. sql数据导入错误代码: 0x80004005_SQL入门第八关 项目实战
  3. java des3加密_JAVA加密算法(3)- 对称加密算法(DES、3DES、AES)
  4. python renamer模块_artellapipe-tools-renamer-以简单的方式重命名DCC对象的工具-Tomas Poveda...
  5. 计算机更改桌面,2010年职称计算机考试:更改桌面背景和颜色
  6. android arm 寄存器,ARM汇编
  7. 解决IDEA中maven工程的jsp、jstl依赖导入了 ,但是 jsp页面的uri却不提示(手动输上也报红)
  8. Visual Stdio2013 编译错误【error C4996:'scanf':This function or variable may be unsafe.】最简单的解决方法
  9. java.util.Scanner简单应用
  10. java中finally和return的执行顺序