原型链
2015-07-07 09:58
465 查看
[b]原型链[/b]
由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined.原型链一般实现为一个链表,这样就可以按照一定的顺序来查找。
原型链代码实例
重温了昨天学习的继承,原型链的模型Child->Father->Object
child调用sayName函数,由于Child对象中没有该函数,所以在其原型对象Father中查找,查找到该函数后,执行该函数,结果为child
原型的动态性
大多情况下,我们修改原型链,对象实例都会随着原型链做出相应的改变:
但是需要注意以下情况:
因为第8行的代码重写了整个person的原型,因为重写原型对象会切断现有原型对象与原来已经存在的任何对象实例之间的联系,它们包含的指针[[prototype]]仍然指向原来的原型对象
由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined.原型链一般实现为一个链表,这样就可以按照一定的顺序来查找。
原型链代码实例
function Father(){ this.name="father"; this.age=40; this.sayName=function(){ alert(this.name); } } function Child(){ this.age="22"; this.name = "child"; } Child.prototype = new Father(); var child = new Child(); child.sayName(); //child
重温了昨天学习的继承,原型链的模型Child->Father->Object
child调用sayName函数,由于Child对象中没有该函数,所以在其原型对象Father中查找,查找到该函数后,执行该函数,结果为child
原型的动态性
大多情况下,我们修改原型链,对象实例都会随着原型链做出相应的改变:
function Person(){ this.name = "wutian"; } var per = new Person(); alert(per.name);//wutian Person.prototype.age = 22; alert(per.age);//22
但是需要注意以下情况:
function Person(){ this.name = "wutian"; } var per = new Person(); alert(per.name);//wutian Person.prototype = {name:"little-tian",age:22}; alert(per.name);//wutian alert(per.age);//undefined
因为第8行的代码重写了整个person的原型,因为重写原型对象会切断现有原型对象与原来已经存在的任何对象实例之间的联系,它们包含的指针[[prototype]]仍然指向原来的原型对象
相关文章推荐
- #笔记#圣思园 JavaWeb 第23讲——JavaBean
- Check Point R 77.30 ReleaseNotes 2015年5月27日更新版本
- sql
- svn 服务器搭建 以及ecilpse svn布局
- NOIP2011观光公交
- windows下webrtc的编译 2015
- SqlDataAdapter.Update批量数据更新
- char*,const char*和string的相互转换
- activiti-tomcat
- iOS开发之多表视图滑动切换示例(仿"头条"客户端)---优化篇
- FreeMarker如何输出特殊含义字符
- 记录SQL Server2008日志文件损坏的恢复过程
- python 进程池Pool
- Extension Method[上篇]
- 使用Hyper-V集群和存储功能以达到HA
- 一次完整的HTTP事务过程分析
- Myeclipse SVN插件使用
- 双机 集群 容灾 负载均衡的理解
- [Leetcode]Number of Island
- windows平台下载webrtc代码和生成vs2013工程(非ninja)