关闭

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

409人阅读 评论(0) 收藏 举报
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实例化后,其成员被实例化,实例对象方可调用。
  同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:73654次
    • 积分:1037
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:33篇
    • 译文:2篇
    • 评论:16条
    最新评论