图文详解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 offsetX与layerX区别
Mar 12 Javascript
JSON JQUERY模板实现说明
Jul 03 Javascript
AngularJS的一些基本样式初窥
Jul 27 Javascript
js图片卷帘门导航菜单特效代码分享
Sep 10 Javascript
JS代码实现table数据分页效果
May 26 Javascript
js print打印网页指定区域内容的简单实例
Nov 01 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
Sep 29 Javascript
vue实现鼠标移入移出事件代码实例
Mar 27 Javascript
js实现批量删除功能
Aug 27 Javascript
vue 判断页面是首次进入还是再次刷新的实例
Nov 05 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
基于文本的留言簿
2006/10/09 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
详解Python正则表达式re模块
2019/03/19 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
python程序需要编译吗
2020/06/19 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
德国团购网站:Groupon德国
2018/03/13 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
致400米运动员广播稿
2014/02/07 职场文书
班级旅游计划书
2014/05/03 职场文书
化学专业自荐信
2014/05/28 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书