《JavaScript教程》11章 对象


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