javascript
Jetpak is Public
Created By: xiong
Last Modified: 08/04/06
Summary: A jetpak created on Sat, 29 Jul 2006 07:52:27 GMT

javascript中的自定义对象

javascript中的自定义对象

关键词javascript    对象设计    对象定义                                          

 

一、javascript中对象的定义方式有两种
 
1)第一种是FFN方式。 其中第一个F(function)定义类的基本结构,第二个F(function)就是类中方法定义,而N就是指用new来在类模板的基础上创建对象。在FF过程中,用到的最重要的属性就是this 。例子:
 

 
    Script 3.11 - Creating a custom object
   
 
 
   
 
 
2)第二种方式是用对象生成器(OI,object initializer )。 这种方式直接简单,对象架构定义、属性的初始化一次完成,不用new关键字。例子:
 

 
    Script 3.12 - Another way to create a custom<br/> object
   
 
 
   
 
 
 
二、定义外的其他明面
 
1)对比。FFN方式的对象定义可以说是OOP编程的类定,可以用来建立多个实例,同时这种定义方式是可以被继承的(使用prototype属性)。OI方式是一对一的方式,简单直接。
 
2)FFN与prototype属性。继续使用1)中的例子。需要注意的是,只有FFN方式定义的"类"有prototype属性,而生成的具体对象是没有的。这种增加或重写会对该类的所有实例产生作用
 
首先,扩展(即增加或重写)类的属性和方法。
     Customer . prototype .nickname=null;
 
然后,就是在类生成的所有对象中使用了:
     Customer1.nickname="Lee";
     ……
     Customer9.nickname="Jack";
 
3)对具体对象的扩展
对于FFN生成的某个具体对象或用OI生成的具体对象,可以通过直接用赋值 的方式增加或重写该对象的(不会影响其他对象实例) 属性或方法。例子(重写“2)”中BODY内的脚本):
 
   
 
4)类的静态成员
就是OOP中“属于”类的成员,在类定义时就声明并初始 化,在调用时用类名来调用,而不是具体对象名。就是因为它属于类,属于类的所有实例,而不是某个具体实例。此时不是对类的原型(prototype)的扩展,而是类的原型定义的一部分。所以不能用prototype属性。
     
首先,类体外声明并初始化:
     Customer.NATIONALITY="AMERICA";
然后,就是在类生成的所有对象中使用了:
     alert(Customer.NATIONALITY);
 
只有静态方法能操作静态属性成员,普通方法不能操作静态成员;而静态方法也只能操作静态属性。
     Customer.CHANGENATIONALITY=function(){
        this.NATIONALITY="CHINA";
     };
 
如果静态方法要操作非要操作非静态属性,需要给静态函数传递对象实例作为参数:
 
     //customer是对象实例
      Customer.CHANGENATIONALITY=function(customer){
        this.NATIONALITY="CHINA";
        customer.name="newNameUnknown";
      };
     ……
     //调用
     Customer1 =new Customer("Mike","8043335555");
     Customer .CHANGENATIONALITY(Customer1 );

From: http://xpring.bokee.com/4750663.html




ADVERTISING