這種模式的基本思想是建立一個函數,該函數的做用僅僅是封裝建立對象的代碼,而後再返回新建立的對象;不過,從表面看這個函數和構造函數相似。如:前端
function Persion(name, age) {
var o = new Object()
o.name = name;
o.age = age;
o.sayName = function() {
alert(this.name);
}
return o;
}
var p1 = new Persion('bill', 22)
p1.sayName() // bill
複製代碼
上例中咱們能夠看到,除了使用new操做符並把使用的包裝函數叫作構造函數以外,這個模式跟工廠模式一摸同樣。構造函數再不返回值的狀況下,默認會返回新對象的實例。而經過在構造函數的末尾添加一個return 語句,能夠重寫調用構造函數時返回的值。數組
這個模式能夠在特殊的狀況下用來爲對象建立構造函數。假設咱們想建立一個具備額外方法的特殊數組。因爲不能直接修改Array構造函數,所以能夠用這個模式。如:bash
function SpecialArray() {
// 建立數組
var arr = new Array();
// 添加值
arr.push.apply(arr, arguments);
// 添加方法
arr.toPipeString = function() {
return this.join("|");
}
return arr;
}
var colors = new SpecialArray('red', 'blue', 'green');
console.log(colors.toPipedString()) // "red|blue|green"
複製代碼
說明: 構造函數返回的對象與在構造函數外部建立的對象沒有什麼不一樣。所以,不能依賴 instanceof 操做符來缺點對象類型。app
若有侵權,請發郵箱至wk_daxiangmubu@163.com 或留言,本人會在第一時間與您聯繫,謝謝!! 函數