javascript中的自定义对象

=====================================================================================

以下文章 来自http://xpring.bokee.com/4750663.html,作者:春风秋露

一、javascript中对象的定义方式有两种
 
1) 第一种是FFN方式。其中第一个F(function)定义类的基本结构,第二个F(function)就是类中方法定义,而N就是指用new来在类模板的基础上创建对象。在FF过程中,用到的最重要的属性就是 this。例子:
 
<HTML>
  <HEAD>
    <TITLE>Script 3.11 - Creating a custom object</TITLE>
    <SCRIPT LANGUAGE="javascript" TYPE="Text/javascript">
    <!--Start hiding javascript statements
      function Customer(name, phone) {
        this.name = name;
        this.phone = phone;
        this.ShowAlert = ShowAlert;
      }
      function ShowAlert() {
        window.alert("Customer: " + this.name + " - Phone: "
+ this.phone);
      }
    // End hiding javascript statements -->
    </SCRIPT>
  </HEAD>
  <BODY>
    <SCRIPT LANGUAGE="javascript" TYPE="Text/javascript">
    <!--Start hiding javascript statements
      Customer1 = new Customer("Robert Robertson",
8043334444);
      Customer1.ShowAlert();
    // End hiding javascript statements -->
    </SCRIPT>
  </BODY>
</HTML>
 
2) 第二种方式是用对象生成器(OI,object initializer)。这种方式直接简单,对象架构定义、属性的初始化一次完成,不用new关键字。例子:
 
<HTML>
  <HEAD>
    <TITLE>Script 3.12 - Another way to create a custom
object</TITLE>
    <SCRIPT LANGUAGE="javascript" TYPE="Text/javascript">
    <!--Start hiding javascript statements
      function ShowAlert() {
        window.alert("Customer: " + this.name + " - Phone: "
+ this.phone);
      }
    // End hiding javascript statements -->
    </SCRIPT>
  </HEAD>
  <BODY>
    <SCRIPT LANGUAGE="javascript" TYPE="Text/javascript">
    <!--Start hiding javascript statements
      Customer1 = {name:"Robert Robertson", phone:8043334444,
ShowAlert:ShowAlert};
      Customer1.ShowAlert();
    // End hiding javascript statements -->
  </SCRIPT>
  </BODY>
</HTML>
 
 
二、定义外的其他明面
 
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内的脚本):
 
    <SCRIPT LANGUAGE="javascript" TYPE="Text/javascript">
    <!--Start hiding javascript statements
      Customer1 = {name:"Robert Robertson", phone:8043334444,
ShowAlert:ShowAlert};
      Customer1.ShowAlert();
      Customer1.ShowAlert=function(){
         var newName;
         newName=prompt("Please input new name:");
         alert("New name is "+newName);
      };
      Customer1.ShowAlert();
    // End hiding javascript statements -->
    </SCRIPT>
 
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: JavaEye.com

JavaScript可以不必定义对象类别而直接定义对象实例:
var person = {
 name : "",
 age : 0,
 toString: function() {
 document.writeln("[name]:"+this.name+"<br>"+"[age]:"+this.age);
 }
}

完整的HTML例子
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JavaScript</title>
<script language="javascript" type="text/javascript">
var person = {
 name : "",
 age : 0,
 toString: function() {
 document.writeln("[name]:"+this.name+"<br>"+"[age]:"+this.age);
 }
}
</script>
</head>

<body>
<script type="text/javascript">
 person.name="robbin";
 person.age=30;
 person.toString();
</script>
</body>
</html>
====================================================================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值