1. 程式人生 > >JavaScript學習筆記(二)——建立物件

JavaScript學習筆記(二)——建立物件

在前一節說過,型別可以劃分為基礎型別和引用型別兩大類,而每個物件都是基於一個引用型別建立的。

建立物件的模式有很多種。

一、工廠模式

工廠模式是軟體工程領域一種廣為人知的設計模式,開發人員可以編寫一種函式,用函式進行封裝,通過特定的介面來建立物件,舉例說明。

function createPerson(name,age){
    var o=new Object();
    o.name=name;
    o.age=age;
    o.show=function(){
        alert(this.name);
    };
    return o;
}
var person=createPerson("Tom",18);
person.show();  //Tom

這種模式可以解決建立多個相似物件的問題,但是沒有解決物件識別的問題。

二、建構函式模式

使用建構函式模式必須使用new操作符,呼叫建構函式時會經歷以下四個步驟:

(1)建立一個新物件

(2)將建構函式的作用域賦給新物件(因此,this就指向了這個新物件)

(3)執行建構函式中的程式碼(為新物件新增屬性)

(4)返回新物件

function Person(name,age){
    this.name=name;
    this.age=age;
    this.show=function(){
        alert(this.name);
    };
}
var person=new Person("Tom",18);
person.show();  //Tom

建立自定義的建構函式意味著將它的例項標識為一種特定型別,這正是它勝過工廠模式的地方。但是這種模式仍然有它的缺陷,每一個例項都需要重新建立一個新的function。

三、原型模式

無論什麼時候,只要建立一個新函式,就會為這個函式建立一個prototype屬性。在預設情況下,所有prototype屬性都會自動獲得一個constructor(建構函式)屬性,這個屬性包含一個指向prototype屬性所在函式的指標。

用途是可以讓所有物件例項包含它的屬性和方法。

function Person(){
    Person.prototype.name="Tom";
    Person.prototype.age=19;
    Person.prototype.show=function(){
        alert(this.name);
    };
}
var person1=new Person();
var person2=new Person();
person1.show();  //Tom
person2.show();  //Tom

但是使用這種方法就讓我們的例項包含相同的屬性了,在實際中我們會將這些模式組合起來進行使用。

組合使用了建構函式模式和原型模式,這種模式也是我們定義引用型別的預設模式。

function Person(name,age){
    this.name="Tom";
    this.age=19;
}
Person.prototype={
    show=function(){
        alert(this.name)
    }
}
var person1=new Person("Tom",19);
var person2=new Person("Alice",10);
person1.show();  //Tom
person2.show();  //Alice