深入浅出理解javaScript原型链


Posted in Javascript onMay 09, 2015

本文实例讲述了javaScript的原型链。分享给大家供大家参考。具体分析如下:

对于javascript原型链,以前都觉得是个很深的东西,一直没有理解很明白,今天看了一些介绍后,发现这张图,表示再没有什么语言能比这张图说得清楚了。

看了这张图后突然对javascript有了质的理解。

深入浅出理解javaScript原型链

javascript的原型链有显式和隐式两种:

显式原型链:即我们常见的prototype;

隐式原型链:在一般环境下无法访问,即不可见,在FireFox下可以通过__proto__方式访问;隐式原型链用于javascript引擎内部对原型链的搜寻,通过显示原型链来设置;
 
一、prototype和__proto__的概念

prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象。它是显示修改对象的原型的属性。

__proto__是一个对象拥有的内置属性(请注意:prototype是函数的内置属性,__proto__是对象的内置属性),是JS内部使用寻找原型链的属性。

用chrome和FF都可以访问到对象的__proto__属性,IE不可以。

二、new 的过程

var Person = function(){};
var p = new Person();

new的过程拆分成以下三步:

(1) var p={}; 也就是说,初始化一个对象p
(2) p.__proto__ = Person.prototype;
(3) Person.call(p); 也就是说构造p,也可以称之为初始化p

关键在于第二步,我们来证明一下:

var Person = function(){};
var p = new Person();
alert(p.__proto__ === Person.prototype);

这段代码会返回true。说明我们步骤2是正确的。

三、示例

var Person = function(){};
Person.prototype.sayName = function() {
  alert("My Name is Jacky");
};
Person.prototype.age = 27;
var p = new Person();
p.sayName();

p是一个引用指向Person的对象。我们在Person的原型上定义了一个sayName方法和age属性,当我们执行p.age时,会先在this的内部查找(也就是构造函数内部),如果没有找到然后再沿着原型链向上追溯。

这里的向上追溯是怎么向上的呢?这里就要使用__proto__属性来链接到原型(也就是Person.prototype)进行查找。最终在原型上找到了age属性。

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
IE 下的只读 innerHTML
Aug 21 Javascript
jquery CSS选择器笔记
Mar 29 Javascript
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
JavaScript面向对象程序设计教程
Mar 29 Javascript
JavaScript实现form表单的多文件上传
Mar 27 Javascript
angular ng-click防止重复提交实例
Jun 16 Javascript
微信小程序使用Socket的实例
Sep 19 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
微信小程序icon组件使用详解
Jan 31 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 #Javascript
JS动画效果打开、关闭层的实现方法
May 09 #Javascript
js实现顶部可折叠的菜单工具栏效果实例
May 09 #Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
May 09 #Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 #Javascript
javasript实现密码的隐藏与显示
May 08 #Javascript
jquery实现动态改变div宽度和高度
May 08 #Javascript
You might like
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python实现飞机大战
2018/09/11 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
python super函数使用方法详解
2020/02/14 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
keras 读取多标签图像数据方式
2020/06/12 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
团队精神的演讲稿
2014/05/14 职场文书
课外活动总结范文
2014/07/09 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
交通事故责任认定书
2015/08/06 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
python+opencv实现视频抽帧示例代码
2021/06/11 Python