js原型链原理看图说明
2012-07-07 00:00
681 查看
当初ECMAscript的发明者为了简化这门语言,同时又保持继承的属性,于是就设计了这个链表。。
在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。
于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。
文字说起来有点儿绕,看图说话
当我不指定__proto__的时候,foo也会预留一个这样的属性,
如果有明确的指向,那么这个链表就链起来啦。
很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。
__proto__默认的也有指向。它指向的是最高级的object.prototype,而object.prototype的__proto__为空。
理解了__proto__这个属性链接指针的本质。。再来理解constructor。
当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.
【参考文档】
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。
于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。
文字说起来有点儿绕,看图说话
var foo = { x: 10, y: 20 };
当我不指定__proto__的时候,foo也会预留一个这样的属性,
如果有明确的指向,那么这个链表就链起来啦。
很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。
__proto__默认的也有指向。它指向的是最高级的object.prototype,而object.prototype的__proto__为空。
var a = { x: 10, calculate: function (z) { return this.x + this.y + z } }; var b = { y: 20, __proto__: a }; var c = { y: 30, __proto__: a }; // call the inherited method b.calculate(30); // 60
理解了__proto__这个属性链接指针的本质。。再来理解constructor。
当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.
function Foo(y){ this.y = y ; } Foo.prototype.x = 10; Foo.prototype.calculate = function(z){ return this.x+this.y+z; }; var b = new Foo(20); alert(b.calculate(30));
【参考文档】
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
相关文章推荐
- js原型链原理看图说明
- js原型链原理看图说明
- js原型链原理看图说话
- Ajax原理详细说明
- JNI技术实践小结--原理分析和详细步骤截图说明
- SSKeychain在iOS中的原理和使用说明
- 卡尔曼滤波的原理说明
- 16QAM原理说明
- Ajax原理详细说明(转自ibm开发者网站)
- Java集合系列:-----------04fail-fast总结(通过ArrayList来说明fail-fast的原理以及解决办法)
- Sql自动配置器原理及其说明
- 组成原理说明------地址对齐
- AjaxPro的原理简单说明
- spark shuffle内在原理说明
- Memcache和mysql交互流程操作原理说明
- android实现原理说明之一_application Intent Task Activity
- 过滤器:自清洗过滤器工作原理简要说明
- GOOGLE排名推广原理分析说明
- MySQL 储存过程-原理、语法、函数详细说明