JavaScript中的对象有2部分,一是HTML文中定义的对象,可以直接使用。一是用JavaScript语句新产生的对象。本章讲述的是后一种的特例,即定义一个新的类以及类的属性、方法。上一章讲到函数也是对象,准确地说应该叫类,只不过权威资料上既然那么写,大家便一直这么称呼。
类的构造函数
function MyClass() { //和普通的函数定义完全相同
··· //构造函数的参数是任意的
}
类的属性
function MyClass(para1, para2, ...) { //类的所有属性必须在构造函数中
this.att1 = para1; //用this指定,并赋上初始值。
this.att2 = "." + para2; //不需要赋值的属性可以赋null。
}
类的方法
function methodOfMyClass() { //事先定义一个函数备用,
alert(this.att1 + this.att2); //然后在下面的构造函数中指定。
} //用到当前类的属性时,this不可缺。
function MyClass(para1, para2, ...) { //构造函数中不指定一下,上面的函数就变成了普通函数,而不是类的方法
this.att1 = para1; //属性1
this.att2 = "." + para2; //属性2
this.method1 = methodOfMyClass; //构造函数中指定前面定义的函数名
} //这是回调函数的用法
类的实例(被使用)
function test(){
var obj = new MyClass("诸葛", "孔明");
obj.method1(); //结果显示对话框:“诸葛.孔明”
alert(obj.att1); //结果显示对话框:“诸葛”
}
object = new Object(); //变量先赋于一个既存对象的实例。
var obj = new Date();
var myobj = new MyClass("1989","06");
object.constructor; //取类的定义程序,注意:这是属性,不是方法
//例子1:JavaScript已经定义好的类
var now = new Date(); //xx的内容: function Date() {
xx = now.constructor; // [native code]
// }
//例子2:自定义的类
function myClass(){ //这3行内容显示在下面的对话框中
this.id = Math.random(); //
} //
var myobj = new MyClass();
alert(myobj.constructor); //对话框中显示上面3行
Object.prototype.newAttName; //对已经定义的类增加新的属性
Date.prototype.DC = "公元前"; xx = new Date(); alert(xx.DC); //显示:"公元前" xx.DC = "公元后"; alert(xx.DC); //显示:"公元后"
object.toString(); //类都有toString()方法,也可覆盖它
function myToString() { //事先定义一个函数,以备下面的类的方法用
return this.id + this.Name;
}
function myClass(){
this.id = "abc";
this.name = "xyz"
this.toString = myToString; //将上面定义的函数变成序列化的方法
}
var myobj = new MyClass();
alert(myobj.toString()); //对话框中显示: "abcxyz"
object.valueOf(); //根据类型求值 //注: Number型,返回数值; String型,返回字符串; //日期型,返回getTime()
var strX = "abcd"; var intX = 123; var dateX = new Date(); alert(strX.valueOf()); //对话框中显示: "abcd" alert(intX.valueOf()); //对话框中显示: 123 alert(dateX.valueOf()); //对话框中显示: 1102520463140