深入浅出理解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 相关文章推荐
JS与框架页的操作代码
Jan 17 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
Mar 16 Javascript
js实现幻灯片播放图片示例代码
Nov 07 Javascript
网页广告中JS代码的信息监听示例
Apr 02 Javascript
javascript实现时间格式输出FormatDate函数
Jan 13 Javascript
jQuery对象初始化的传参方式
Feb 26 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
Dec 23 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
Jul 13 jQuery
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
Dec 11 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
Sep 04 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
简单实现js拖拽效果
2017/07/25 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
使用python统计文件行数示例分享
2014/02/21 Python
Python跳出循环语句continue与break的区别
2014/08/25 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
儿童学习python的一些小技巧
2018/05/27 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
Python 列表反转显示的四种方法
2020/11/16 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
python re模块和正则表达式
2021/03/24 Python
工程部经理岗位职责
2013/12/08 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
小学英语教学随笔
2015/08/14 职场文书
高中班长竞选稿
2015/11/20 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
配置Kubernetes外网访问集群
2022/03/31 Servers