通过javascript中的new认识基于原型的面向对象。

来源:互联网 发布:刺客信条3低配置优化 编辑:程序博客网 时间:2024/05/16 00:34
j
函数就是对象。其实通常我们在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下的属性。即后者可以覆盖前者。


  在JavaScript中,prototype对象是实现面向对象的一个重要机制。

  每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。
  在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。
  1、该对象被类所引用,只有函数对象才可引用;
  2、在new实例化后,其成员被实例化,实例对象方可调用。
  同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。