[ js ] 幾種 define class 的 patterns
1. 定義 function 再把 method 加到 prototype 裡面。
function Cat(){}
Cat.prototype.eat = function(){};
Cat.prototype.drink = function(){};
constructor 當然可以像下面這樣寫。
var Cat = function(){};
不過我個人喜歡下面這樣寫,因為比較像傳統 OOP 定義 class 的方法:
function Cat()
{
arguments.callee.prototype.eat = function(){};
arguments.callee.prototype.drink = function(){};
}
> -------------------------------------------------------------------------- <
2. 與第一型一樣定義 function,但重新定義 prototype object。
function Cat(){}
Cat.prototype =
{
eat: function(){},
drink: function(){}
}
> -------------------------------------------------------------------------- <
3. 在 Function 的 prototype object 中新增一個宣告 method 的 function,
再利用這個 function 宣告 methods。
Function.prototype.method = function(name, fn){ this.prototype[name] = fn; };
function Cat(){}
Cat.method("eat", function(){});
Cat.method("drink", function(){});
> -------------------------------------------------------------------------- <
4. 與第三型相似,但透過小小改寫,變成 chaining pattern。
Function.prototype.method = function(name, fn){
this.prototype[name] = fn;
return this;
};
Cat.method("eat", function(){}).method("drink", function(){});
> -------------------------------------------------------------------------- <
5. 如果你的 class 只有一個物件的話,可以考慮 singleton。
var Cat =
{
eat: function(){},
drink: function(){}
};
> -------------------------------------------------------------------------- <
這是 JavaScript 的美。:D
--
Oni devas ami animalojn. Ili estas tiel bongustaj.
One should love animals. They are so tasty.
每個人都應該愛動物,他們是如此美味。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.67.16.75
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章