对javascript prototype的一点初步理解
2013-08-17 17:11
417 查看
项目组由印度高端引入了一个脚本框架。当中用到了prototype来实现一些功能。
今天找了几篇关于javascript的prototype的文章读了下,有了点初步的理解,然后在纸上画了个关系图概括了一下自己的理解,最后发现和[1]文最后的附图不谋而合。
来看看[1]文最后的附图:
![](http://images.cnitblog.com/blog/273736/201308/17163153-208a90e417434110a944116c1bba906e.png)
据说这图来自ECMA Script的标准。
个人对这图的一些理解,CF就是function的定义(可以类比为java中的class的定义),当中定义了p1和p2两个属性,当中有一个prototype对象(javascript内置定义的对象),指向的CFp是一个对象的实例。注意这里CF的prototype和CFp的关系是实线的,代表explicit prototype property。
而下面的cf1,cf2 ...则是CF的实例化,每个实例里的q1,q2就是CF定义中的p1,p2的实例化。
而cf1们和CFp的虚线关系是什么回事?
这实际上就是每个CF的实例(cf1, cf2...)中,都有一个__proto__对象,它直接指向的是CF的prototype对象,因此是间接指向CFp对象。
图中的关系写成伪代码大概是这样:
从这里可以看出,javascript的prototype的确有点静态(static)的意思,因为对于每个函数(类比java中的类)的定义,都有一个唯一的prototype对象。
而随着层次的增加,prototype会形成一个prototype chain,这个,可以说就是javascript实现继承效果的基础吧?
但是,对这个图还有一个疑问就是,左上角CF引出的虚线又是代表什么关系呢??
参考文献:
[1] Javascript – How Prototypal Inheritance really works
[2] Javascript继承机制的设计思想
[3] Web程序员应该知道的Javascript prototype原理
今天找了几篇关于javascript的prototype的文章读了下,有了点初步的理解,然后在纸上画了个关系图概括了一下自己的理解,最后发现和[1]文最后的附图不谋而合。
来看看[1]文最后的附图:
![](http://images.cnitblog.com/blog/273736/201308/17163153-208a90e417434110a944116c1bba906e.png)
据说这图来自ECMA Script的标准。
个人对这图的一些理解,CF就是function的定义(可以类比为java中的class的定义),当中定义了p1和p2两个属性,当中有一个prototype对象(javascript内置定义的对象),指向的CFp是一个对象的实例。注意这里CF的prototype和CFp的关系是实线的,代表explicit prototype property。
而下面的cf1,cf2 ...则是CF的实例化,每个实例里的q1,q2就是CF定义中的p1,p2的实例化。
而cf1们和CFp的虚线关系是什么回事?
这实际上就是每个CF的实例(cf1, cf2...)中,都有一个__proto__对象,它直接指向的是CF的prototype对象,因此是间接指向CFp对象。
图中的关系写成伪代码大概是这样:
function CFp() { this.xxx = function(){...}; } function CF() { this.P1 = "p1"; this.P2 = "p2"; } CF.prototype = new CFp();//图中的实线关系:explicit prototype property var cf1 = new CF(); var cf2 = new CF(); ... cf1.xxx(); //这里就可以通过cf1的__proto__引用到CF的prototype对象从而调用到CFp的xxx方法
从这里可以看出,javascript的prototype的确有点静态(static)的意思,因为对于每个函数(类比java中的类)的定义,都有一个唯一的prototype对象。
而随着层次的增加,prototype会形成一个prototype chain,这个,可以说就是javascript实现继承效果的基础吧?
但是,对这个图还有一个疑问就是,左上角CF引出的虚线又是代表什么关系呢??
参考文献:
[1] Javascript – How Prototypal Inheritance really works
[2] Javascript继承机制的设计思想
[3] Web程序员应该知道的Javascript prototype原理
相关文章推荐
- 读李战的悟透JavaScript的一点理解--深入了解预编译
- 理解 JavaScript 中的 Function.prototype.bind
- JavaScript中的函数hasOwnProperty()和isPrototypeOf()的一些理解
- 理解JavaScript原型prototype
- javascript中的this与prototype,原型理解
- 理解 JavaScript 中的 Function.prototype.bind
- javascript原型prototype的一个你不一定知道的理解
- JavaScript基础(1)prototype方法的理解?
- 深入理解javascript原型和闭包(3)——prototype原型
- 对于JavaScript prototype的理解
- JavaScript中__proto__与prototype的关系深入理解
- 深入理解javascript原型和闭包(3)——prototype原型
- 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)
- 关于JavaScript 原型链的一点个人理解
- 对javascript 的prototype属性的理解
- Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同
- 关于 JavaScript prototype __proto__ 一点总结
- javascript-js 的prototype原型理解讲解
- Javascript原型Prototype理解
- 如何理解javascript中的prototype(原型)和原型链?