1. 程式人生 > >JavaScript中的建構函式和工廠函式

JavaScript中的建構函式和工廠函式

JavaScript中的工廠函式

 1 function crateHero (name,blood,weapoon) {
 2             var o = new Object();
 3             o.name = name;
 4             o.blood = blood;
 5             o.weapoon = weapoon;
 6             o.attch = function () {
 7             console.log(this.name+"用"+this.weapoon+"進行了攻擊");
8 } 9 return o; 10 } 11 var hero = new crateHero("Tom","10","foot"); 12 hero.attch();

JavaScript中的建構函式:

 1 function Hero(name,blood,weapon) {
 2             this.name = name;
 3             this.blood = blood;
 4             this.weapon = weapon;
 5             this
.attack = function () { 6 console.log(this.name+"用"+this.weapon+"進行攻擊"); 7 } 8 } 9 var HeroOne = new Hero("劉備",100,"雌雄雙股劍"); 10 HeroOne.attack();

以上兩個程式碼片段其實都是實現相同的功能,表面上看兩個的區別只是第一個工廠函式要複雜一些,第二個要簡單一些。其實最最重要的一點是工廠函式它沒有辦法解決物件的識別問題(即怎麼知道一個物件的型別),而建構函式就很好的解決了這個問題每一個例項都指向了建立該例項的建構函式.,就像下面的列子:

1 console.log(HeroOne instanceof Hero); 

列印值為true,而工廠函式只能是object

其實建構函式可以理解為簡化的工廠函式,下面是建構函式的執行分析,不難可出其原理和工廠函式幾乎一致:

  1. 在記憶體中建立一個空物件(沒有體現出來)
  2. 設定建構函式的this,讓this指向剛剛建立的物件
  3. 執行建構函式的程式碼
  4. 返回物件(沒有體現出來)

Ps:個人理解若有錯誤歡迎指正。