图文详解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 相关文章推荐
十个优秀的Ajax/Javascript实例网站收集
Mar 31 Javascript
获取焦点时,利用js定时器设定时间执行动作
Apr 02 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
JS控制按钮10秒钟后可用的方法
Dec 22 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
react的滑动图片验证码组件的示例代码
Feb 27 Javascript
基于原生js实现判断元素是否有指定class名
Jul 11 Javascript
微信小程序实现单个或多个倒计时功能
Nov 01 Javascript
详解前端任务构建利器Gulp.js使用指南
Apr 30 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
PHP将XML转数组过程详解
2013/11/13 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
python实现简单银行管理系统
2019/10/25 Python
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
几道数据库的面试题或笔试题
2014/05/31 面试题
建议书标准格式
2014/03/12 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
父母寄语大全
2014/04/12 职场文书
电子商务专业求职信
2014/07/10 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
三好生演讲稿
2014/09/12 职场文书
假释思想汇报范文
2014/10/11 职场文书
单位实习鉴定评语
2015/01/04 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android