JavaScript 建立物件 建構函式模式

2021-08-13 22:09:42 字數 2014 閱讀 8130

建構函式模式:

ecmascript中的建構函式可以用來建立特定型別的物件,也可以建立

例2:

function person(name,age)

}var person1=new person("tim",35);

var person2=new person("bob",40);

person1.getname();//tim

person2.getname();//bob

alert(person1);//object

alert(person2);//object

alert(person1 instanceof person);//true,person1是person的乙個例項

alert(person2 instanceof person);//true

,person2是person的乙個例項

alert(person1.constructor == person);//true,person1有乙個建構函式屬性,指向person

alert(person2.constructor == person);//true

,person1有乙個建構函式屬性,指向person

將例2的**與之前的建構函式的相比較,可以發現以下幾點不同:

(1)沒有顯示的建立物件;

(2)直接將屬性和方法賦值給this物件;

(3)沒有return語句。

按照慣例:建構函式始終應該以乙個大寫字母開頭,而非建構函式應該以乙個小寫

字母開頭。

對於上面的例2,可以發現:要建立person的新例項,必須使用new操作符。其建立

的主要步驟為:

(1)建立乙個新物件;

(2)將建構函式的作用域賦給新物件(此時this指向的是這個新物件)

(3)執行建構函式中的**;

(4)返回新物件。

建構函式勝過工廠模式的地方在於:建構函式的例項除了是物件之外,還是一種特殊

的建構函式型別(可使用instanceof進行驗證)

建構函式的缺點:

使用建構函式的主要問題,就是每個方法都要在每個例項上重新建立一遍。對於例2而言,

新增如下**:

**2:alert(person1.getname==person2.getname);//false

通過之前的了解,物件的方法可以模擬為乙個指標,指向記憶體中特定區域的函式,由**2,

可以發現:即是是由同乙個建構函式所建立的例項,他們的方法都會被重新建立,而不管

該方法是否完成同樣的功能。

對於**2,我們可以嘗試做如下的修改:

**3:

function person(name,age)

function getname()

var person1=new person("tim",35);

var person2=new person("bob",40);

person1.getname();//tim

person2.getname();//bob

alert(person1.getname==person2.getname);//true

若將方法定義在函式外,即是定義為乙個全域性函式,因為函式是物件,函式名是指標,

此時通過建構函式建立的兩個例項的方法是相同的。但又帶來了乙個更現實的問題:如果

建構函式要定義很多方法,那麼使用上述方法就需要建立更多的全域性函式,那這個構造函

數就毫無封裝性可言。

此時我們可以考慮運用原型模式來解決這個問題。

JavaScript建立物件

一 建立單個物件 方式一 object建構函式 var o new object o.key value 方式二 物件字面量 方式一和二缺點 使用相同的介面建立很多物件會產生大量重複 使用方式三解決 方式三 工廠模式 使用函式封裝以特定介面建立物件的細節 function createobject ...

JavaScript 建立物件

工廠模式抽象了建立具體物件的過程,能夠快速建立大量具有相似屬性及方法的物件。function createperson name,age,job obj.name name obj.age age obj.job job obj.sayname function return obj var per...

JavaScript 建立物件

function person var person new person 複製 使用關鍵字new建立新例項物件經過了以下幾步 1 建立乙個新物件,如 var person 2 新物件的 proto 屬性指向建構函式的原型物件。3 將建構函式的作用域賦值給新物件。也所以this物件指向新物件 4 執...