最近有些朋友一直问起prototye是什么,偶一直不怎么做javascript开发,只能简单说说自己的理解。

javascript其实不是严格意义的OO语言,至少他没有很好地实现封装和继承,甚至javascript使用的是function式对象。

因此,javascript有一个奇怪的东西就是prototype,javascript中约定了每个对象都可以包含一个prototype对象的引用(属性),
这个prototype对象在运行时是不可见的,也就是说,定义了之后,你无法直接使用prototype对象。

那么,prototype对象有什么用呢?它的作用,就是当你去调用一个对象的函数或属性时,javascript首先会在这个对象的定义中查找,如果找不到,
他就会去找这个对象的prototype对象有没有这个定义,如果还找不到,他又会去找prototype对象的prototype,一直到对象没有prototype定义为止。

是不是和函数继承的目的很象?这就是javascript的原型继承特性。
但是我们也看出了,这种查找方式,效率非常之低,尤其在prototype链很长的情况下。javascript 2.0会对此有所改进。

另外,prototype的定义方式也很奇怪,他必须以一个对象实例(而不是类)的形式,绑定到其他类上。记得吗?prototype是定义时的,同时又是对象。

例子:
    o1 = function(){};
    o2 = function(){};
    o2.prototype = new o1;  

如果嫌直接使用prototype挺麻烦,你可以去下载一个prototype.js来用,这个封装真的挺不错:)