JavaScript建立物件 工廠模式

2021-07-30 08:13:09 字數 2570 閱讀 4684

在介紹寄生建構函式模式時,先來介紹一下工廠模式

1.工廠模式

工廠模式是軟體工程領域中一種廣為認知的設計模式,這種模式抽象了具體建立物件的過程,因為在ecmascript中無法建立類。開發人員就發明了一種函式,用函式來封裝以特定介面建立物件的細節。

function

createperson

(name, age, job);

return o;

}var person1 = createperson('zhangsan', 29, 'software enginner ');

var person2 = createperson('lisi', 27, 'doctor ');

使用工廠模式,可以無數次的呼叫這個函式。而每次它都會返回乙個具有三個屬性和乙個方法的物件。工廠模式雖然解決了建立多個物件的問題,但卻沒有解決物件識別的問題(怎樣知道乙個物件的型別)

即 console.log(person1 instanceof object); //true

console.log(person2 instanceof object); //true

console.log(person1.constructor == object); //true

console.log(person2.constructor == object); //true

知道person1 和person2 都屬於物件,卻沒辦法知道物件的型別。所以就出現了建構函式。

而建構函式上節已經講過,現在我們要看的就是和工廠模式的定義物件的方法非常相似的寄生建構函式模式。

2. 寄生建構函式模式

在我們前幾次講的幾種模式都不適用的情況下,可以使用這種。

這種模式的基本思想是建立乙個函式,該函式的作用僅僅是封裝建立物件的**。然後再返回新建立的函式。

function

person

(name, age, job);

return o;

}var person1 = new person('zhangsan', 29, 'software enginner ');

var person2 = new person('lisi', 27, 'doctor ');

從表面上看這像是很典型的建構函式。但是除了使用new操作符並把使用的包裝函式叫做建構函式之外,這個模式其實跟工廠模式是一模一樣的。建構函式在不返回值的情況下,預設返回新物件例項。而在建構函式的尾部新增乙個return 語句,意味著可以重寫呼叫建構函式時的返回值。

這個模式可以在特殊情況下,用來為物件建立建構函式。

function

createperson

(name, age, job);

return o;

}function

specialperson

() return persons;

}var person1 = new specialperson();

person1.alertmsg(); //new message

alert(person1.sayname()); //lisi

在上面的例子中,我們首先建立了建構函式createperson(),然後再使用寄生建構函式模式為該函式的內部物件又新增了新的方法。

使用var person1 = new specialperson();建立乙個新例項。相當於利用使用建構函式specialperson建立的例項,也可以訪問createperson中的屬性和方法。

注意:返回的物件與建構函式或者建構函式的原型屬性之間沒有任何關係。也就是說,通過建構函式返回的物件與在建構函式外部建立的物件沒有什麼不同。因此不能依賴instanceof操作符來確定物件型別。所以一般不建議使用這種模式。

3 .穩妥建構函式模式

所謂穩妥物件,就是沒有公共屬性,而且其方法也不引用this的物件。穩妥物件最適合在一些安全的環境中(這些環境中會禁止使用this和new)。或者在防止資料被其他應用程式改動時使用。

穩妥建構函式模式遵循與寄生建構函式類似的模式。但有區別:

①.新建立物件的例項方法不使用this;

②.不使用new操作符呼叫建構函式

則根據穩妥函式的要求,可以將前面的person改寫為:

function

person

(name , age, job)

//返回物件

return o;

} var friend = person("nicholas", 29, "software enginner");

friend.sayname(); //nicholas

這樣變數friend中儲存的是乙個穩妥物件,除了呼叫sayname之外,沒有其他方法訪問其資料成員。即使有其他**會為這個物件新增新的方法或者資料成員,但也不會有別的方法訪問到傳入到建構函式中的原始資料。穩妥函式提供的這種安全性,使得它非常適合在某些安全執行環境下使用。

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 執...