图文详解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 TO HTML 转换
Jun 26 Javascript
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
jQuery 连续列表实现代码
Dec 21 Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
Jquery on绑定的事件 触发多次实例代码
Dec 08 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
vue登录路由验证的实现
Dec 13 Javascript
Vue前端开发规范整理(推荐)
Apr 23 Javascript
vue webpack打包后图片路径错误的完美解决方法
Dec 07 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
May 01 Javascript
实例讲解React 组件
Jul 07 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
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
layui表格内容溢出的解决方法
2019/09/06 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Django组件content-type使用方法详解
2019/07/19 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
利用python实现汉诺塔游戏
2021/03/01 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
出纳会计岗位职责
2014/03/12 职场文书
3分钟演讲稿
2014/04/30 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
励志演讲稿大全
2014/08/21 职场文书
孩子教育的心得体会
2014/09/01 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
学校运动会广播稿
2014/10/11 职场文书
安阳殷墟导游词
2015/02/10 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python