图文详解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 相关文章推荐
慎用 somefunction.prototype 分析
Jun 02 Javascript
Tinymce+jQuery.Validation使用产生的BUG
Mar 29 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
Apr 20 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
Apr 17 Javascript
JavaScript组合模式学习要点
Aug 26 Javascript
文件上传的几个示例分享【推荐】
Dec 16 Javascript
JavaScript、C# URL编码、解码总结
Jan 21 Javascript
使用vue-resource进行数据交互的实例
Sep 02 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
Dec 12 Javascript
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
node读写Excel操作实例分析
Nov 06 Javascript
vue+element实现动态加载表单
Dec 13 Vue.js
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
模拟flock实现文件锁定
2007/02/14 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
常用的 JS 排序算法 整理版
2018/04/05 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
python中的闭包用法实例详解
2015/05/05 Python
python os.path模块常用方法实例详解
2018/09/16 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
更新修改后的Python模块方法
2019/03/03 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
python实现加密的方式总结
2020/01/19 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
师范应届生教师求职信
2013/11/05 职场文书
车贷收入证明范本
2014/01/09 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
python创建字典及相关管理操作
2022/04/13 Python