閉包(Closure)的細節(四):閉包效能與prototype

閉包(Closure)的細節(三),閉包效能與prototype:

使用閉包時得注意,因為閉包有效能上的影響,主要是反映在處理速度與記憶體的占用。因此確定目的是否確實需要閉包再決定是否使用。還要特別注意無意中造成的閉包,這種閉包沒有實際實現閉包的優點,卻依然擁有其缺點。

看看這種常被新手誤用的的寫法:

<script type="text/javascript">
function MyPlayer(name,race,sex) {
  this.name = name.toString();
  this.race = race.toString();
  this.sex = sex.toString();
  this.getName = function() {
    return this.name;
  };
  this.getRace = function() {
    return this.race;
  };
  this.getSex = function() {
    return this.sex;
  };
}
</script>

這種寫法並不好,這讓他每次產生新的物件時,其物件方法都會被賦值一次。物件通用的方法,應該要被寫在prototype中。如下:

<script type="text/javascript">
function MyPlayer(name,race,sex) {
  this.name = name.toString();
  this.race = race.toString();
  this.sex = sex.toString();
}
MyPlayer.prototype.getName = function() {
  return this.name;
};
MyPlayer.prototype.getRace = function() {
  return this.race;
};
MyPlayer.prototype.getSex = function() {
  return this.sex;
};
</script>

利用原型可以讓物件共享方法,這比上面有效率的多。

這範例說明了prototype與閉包的使用時機,不過嚴格來說上面兩種做法都有點不切實際,因為其實變數本身就是公開屬性了,在為其增加公開方法其實沒必要。比較常的做法是用閉包來模擬並且存取私有變數。用prototype來實作通用方法以及存取通用的私有變數。

其他:

如果你想更了解其他閉包觀念,可以參考看看下面這篇文章:閉包(Closure)的基本概念

我把許多閉包的觀念與用法都收集在這篇文章內。

 
 

  按個讚!~支持本站!~

FB推薦載入中