图文详解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 相关文章推荐
根据出生日期自动取得星座的js代码
Jul 20 Javascript
JS获取URL中的参数数据
Dec 05 Javascript
jquery复选框多选赋值给文本框的方法
Jan 27 Javascript
JavaScript获得url所有参数键值表的方法
Mar 21 Javascript
JS实现控制表格行文本对齐的方法
Mar 30 Javascript
手机Web APP如何实现分享多平台功能
Aug 19 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
Javascript异步编程async实现过程详解
Apr 02 Javascript
electron 如何将任意资源打包的方法步骤
Apr 16 Javascript
浅谈JavaScript中this的指向问题
Jul 28 Javascript
vue router返回到指定的路由的场景分析
Nov 10 Javascript
JavaScript实现淘宝商品图切换效果
Apr 29 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
微信封装的调用微信签名包的类库
2017/06/08 PHP
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
JavaScript实现简单评论功能
2017/08/17 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
使用python生成杨辉三角形的示例代码
2018/08/29 Python
对python 调用类属性的方法详解
2019/07/02 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
学习自我鉴定
2014/02/01 职场文书
培训协议书范本
2014/04/22 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android