|
function kkk(){........};
kkk.prototype.aaa=function(){};
b = new kkk();
为什么这里能够使用b=new kkk()创建对象呢?
函数就是对象。
其实通常我们在javascript里定义的一个函数,都对应着一个以这个函数体为构造函数的对象。
而javascript与java不同的是,他是面向原形的面向对象语言。java是基于类的面向对象语言。
也就是说,可以通过对象来new出一个新的对象。
比如:定义 function fun(p1,p2){} 时, 实际上生成了一个Function类型(预定义类型)的对象,对象名叫fun,对象的构造函数就是这个函数的体.
于是,也可以用另一种方式定义刚才的函数(其实是对象)。
fun=new Function(‘p1,’p2’,…) ;(这种方式定义时,前面的参数都是函数的参数。只有最后一对 ‘’ 里,写入函数体)
对于这个对象,采用fun.var=“XXX”的方式,就可以为对象增加一个属性。而无须声明。
从对象org 去new一个新对象时,首先调用该org的构造函数(函数org定义时的函数体为对象 org的构造函数)。
然后将org对象的prototype属性的子属性(函数和变量)copy到新对象中。
还有构造函数里以 this.XXX= [ function (){}或“xxx”] 形式定义的XXX属性也copy到新对象中去。
当然在对象生成后,也可以另行添加属性(即函数)。
一种方式是其父对象的prototype.xxx下添加,一种是其自己 self.xxx方式添加。
在搜索的时候,先搜索自身然后在搜索父对象的prototype下的属性。即后者可以覆盖前者。 |
|