【JS第25期】設計模式-寄生構造函數模式

這種模式的基本思想是建立一個函數,該函數的做用僅僅是封裝建立對象的代碼,而後再返回新建立的對象;不過,從表面看這個函數和構造函數相似。如:前端

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 或留言,本人會在第一時間與您聯繫,謝謝!! 函數

關注咱們
長按二維碼關注咱們,瞭解最新前端資訊
相關文章
相關標籤/搜索