图文详解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 限制输入和粘贴(IE,firefox测试通过)
Nov 14 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
js实现省市联动效果的简单实例
Feb 10 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
微信小程序 动态传参实例详解
Apr 27 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
Oct 25 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
Dec 26 Javascript
在JS循环中使用async/await的方法
Oct 12 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
详解javascript void(0)
Jul 13 Javascript
vue自定义树状结构图的实现方法
Oct 18 Javascript
vue中data里面的数据相互使用方式
Jun 05 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
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
PHP微信支付开发实例
2016/06/22 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
json跟xml的对比分析
2008/06/10 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
Angular.js之作用域scope'@','=','&'实例详解
2017/02/28 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
python通过post提交数据的方法
2015/05/06 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
啤酒销售实习自我鉴定
2013/09/24 职场文书
哈理工毕业生的求职信
2013/12/22 职场文书
工程安全员岗位职责
2014/03/09 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
无房证明范本
2014/09/17 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
喋血孤城观后感
2015/06/08 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
只用Python就可以制作的简单词云
2021/06/07 Python
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android