图文详解JavaScript的原型对象及原型链


Posted in Javascript onAugust 02, 2016

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

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

一、prototype和__proto__的区别

图文详解JavaScript的原型对象及原型链

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() {}

图文详解JavaScript的原型对象及原型链

/*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中的例外情况)

图文详解JavaScript的原型对象及原型链

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

以上就是本文的全部内容了,本文用三张图解释了JavaScript的原型对象与原型链,希望对大家学习JavaScript的时候有所帮助。

Javascript 相关文章推荐
JavaScript XML和string相互转化实现代码
Jul 04 Javascript
js 窗口抖动示例
Sep 04 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
AngularJS 过滤与排序详解及实例代码
Sep 14 Javascript
jQ处理xml文件和xml字符串的方法(详解)
Nov 22 Javascript
Bootstrap Multiselect 常用组件实现代码
Jul 09 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
Sep 30 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
Jul 28 Javascript
react ant Design手动设置表单的值操作
Oct 31 Javascript
js实现纯前端压缩图片
Nov 16 Javascript
AngularJS基础 ng-mousemove 指令简单示例
Aug 02 #Javascript
功能强大的Bootstrap使用手册(一)
Aug 02 #Javascript
js实现图片缓慢放大缩小效果
Aug 02 #Javascript
基于Vuejs实现购物车功能
Aug 02 #Javascript
js实现统计字符串中特定字符出现个数的方法
Aug 02 #Javascript
js简单时间比较的方法
Aug 02 #Javascript
JavaScript简单获取系统当前时间完整示例
Aug 02 #Javascript
You might like
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
浅析javascript闭包 实例分析
2010/12/25 Javascript
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
基于python select.select模块通信的实例讲解
2017/09/21 Python
python selenium firefox使用详解
2019/02/26 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
python获取linux系统信息的三种方法
2020/10/14 Python
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
留学自荐信
2013/10/10 职场文书
客服文员岗位职责
2013/11/29 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
商品陈列协议书
2014/09/29 职场文书
迟到检讨书
2015/01/26 职场文书
教代会开幕词
2015/01/28 职场文书
订货会邀请函
2015/01/31 职场文书
玄武湖导游词
2015/02/05 职场文书
python实现图片批量压缩
2021/04/24 Python
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA