=====================================================================================
以下文章 来自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);
====================================================================================
====================================================================================
以下文章来自 http://www.cnlei.org/blog/article.asp?id=199
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>
====================================================================================