javascript 裏類的五種實現方式

摘抄自《javascript高級程序設計》一書。
javascript 是面向對象的語言,自然也有面向對象的一些特性。
一:構造函數方式
第一步選擇類名,即構造函數的名字。下面的例子在構造函數裏不創造對象,而是使用this,使用new 運算符調用構造函數的時候在執行第一行代碼前先創建一個對象,這個對象只能用this訪問,然後可以直接賦予this屬性,默認情況下是構造函數的返回值,不必return。
 例子:

function Car(sColor,iDoors)
{
    this.color = sColor;
    this.doors = iDoors;
    this.showColor = function()
    {
        alert(this.color);
    };
}
var oCar1 = new Car("red",4);//output red
var oCar2 = new Car("blue",3);//output blue

上面的例子會爲每個對象都創建獨立的函數版本。再看下面的原型方式
二:原型方式:
該方式利用對象的prototype屬性,可把它看成創建新對象所依賴的原型。下面的例子使用空構造函數設置類名,然後所有的屬性和方法都直接賦予prototype屬性。在調用new Car()的時候原型的所有屬性都被立即賦予要創建的對象。
例子:

function Car()
{
}
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.showColor = function()
{
     alert(this.color);
};
var oCar1 = new Car();//output red

上面的例子在創建多個實例後,對象的屬性值並沒有變。再看下面的混合的構造函數/原型方式
三:混合的構造函數/原型方式:
聯合使用構造函數和原型方式,就可以像其他程序設計語言楊創建對象。使用構造函數定義對象的所有非函數屬性,用原型方式定義對象的函數屬性。

function Car(sColor,iDoors)
{
    this.color = sColor;
    this.doors = iDoors;
}
Car.prototype.showColor = function()
{
     alert(this.color);
};

var oCar1 = new Car("red",4);
var oCar2 = new Car("blue",3);

oCar1.showColor();//output red
oCar2.showColor();//output blue


四:動態原型方法:
動態原型方法的基本想法和混合的構造函數/原型方式相同,唯一的區別是賦予對象方法的位置,看下面的例子:

function Car(sColor,iDoors)
{
    this.color = sColor;
    this.doors = iDoors;
    if(typeof Car.initialized == "undefined")//***
    {
        Car.prototype.showColor = function()
        {
             alert(this.color);
        };
        Car.initialized = true;//***
    }
}


上面的方法使用標誌initialized來判斷是否已給原型賦予任何方法,該方法只創建並賦值一次。

五:混合工廠方式
這種方式的目的是創建假構造函數,只返回一種對象的新實例:

function Car()
{
    var tempCar = new Object;
    tempCar.color = "red";
    tempCar.doors = 4;
    tempCar.showColor = function()
    {
       alert(this.color);
    };
    return tempCar;
}
var oCar1 = new Car();

由於在Car()構造函數內部調用了new運算符,所以將忽略構造函數外的第2個new 運算符。不建議使用這種方式。

可以使用prototype屬性爲任何已有的類定義新的方法。


【hemood [鏈接地址:http://www.cnblogs.com/hemood/archive/2008/09/26/1299360.html】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章