js原型链原理看图说话
2012-07-07 11:49
260 查看
任何一个对象都有一个prototype的属性,在js中可以把它记为:__proto__
当初ECMAscript的发明者为了简化这门语言,同时又保持继承的属性,于是就设计了这个链表。。
在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。
于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。
文字说起来有点儿绕,看图说话
当我不指定__proto__的时候,foo也会预留一个这样的属性,
如果有明确的指向,那么这个链表就链起来啦。
很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。
理解了__proto__这个属性链接指针的本质。。再来理解constructor。
当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.
【参考文档】
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
当初ECMAscript的发明者为了简化这门语言,同时又保持继承的属性,于是就设计了这个链表。。
在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。
于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。
文字说起来有点儿绕,看图说话
varfoo={ x:10, y:20 };
当我不指定__proto__的时候,foo也会预留一个这样的属性,
如果有明确的指向,那么这个链表就链起来啦。
很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。
理解了__proto__这个属性链接指针的本质。。再来理解constructor。
当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.
functionFoo(y){ this.y=y; } Foo.prototype.x=10; Foo.prototype.calculate=function(z){ returnthis.x+this.y+z; }; varb=newFoo(20); varc=newFoo(50); alert(b.calculate(30));//60
alert(c.calculate(50));//80
【参考文档】
相关文章推荐
- 看图说话之二叉堆(优先队列)——原理解析
- js原型链原理看图说明
- js原型链原理看图说明
- js原型链原理看图说明
- js原型链原理看图说话
- 看图说话之二项队列(优先队列)——原理解析
- 架构设计分享之权限系统(看图说话)
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(二)引入attention机制
- 看图说话:手动清除病毒文件流程
- CGContextAddArcToPoint看图说话
- 看图说话排序算法之冒泡排序
- 看图说话
- 看图说话之平衡二叉排序树(AVL树)
- [看图说话] 基于Spark UI性能优化与调试——初级篇
- 看图不说话
- Adobe Photoshop CC 2015(PS CC 2015)看图不说话
- 架构设计分享之权限系统(看图说话)
- 看图说话:你不了解的OA与SAP集成
- 看图说话:浏览器及它们的历史
- Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署