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