1. 程式人生 > >【js學習筆記-057】建構函式過載和工廠方法

【js學習筆記-057】建構函式過載和工廠方法

通過過載建構函式讓它根據傳入引數的不同來執行不同的初始化方法。如Set建構函式

function Set(){

  this.values= {};

  this.n = 0;

  if(arguments.length==1 && isArrayLike(arguments[0])){

     this.add.apply(this,arguments[0]);

   }else if(arguments.length>0){    

      this.add.apply(this,arguments);

  } 

}

這段程式碼所定義的Set建構函式可以顯式將一組元素作為引數列表傳入,也可以傳入元素組成的陣列。但是函式函式有多義性,如果集合的某個成員是一個數組就無法通過這個建構函式來建立集合啦。

下面這個工廠方法用來通過陣列初始化Set物件:

Set.fromArray= function(a){

  s =new Set();

 s.add.apply(s,a);

 return s;

}

可以給工廠方法定義任意的名字,不同名字的工廠方法用以執行不同的初始化,但由於建構函式是類的公有標識,因此每個類只能有一個建構函式。但這並不是一個“必須遵守”的規則。

在JS中是可以定義多個建構函式繼承自一個原型物件的,如果這樣做的話,由這些建構函式的任意一個所建立的物件都屬於同一型別。不推薦這樣使用,但下例程式碼使用這種技術定義了該類的一個輔助建構函式:

function SetFromArray(a){

Set.apply(this,a);

}

SetFromArray.prototype =Set.prototype;

var s = new SetFromArray([1,2,3]);

s instanceof Set ; //=>true