[ js ] 幾種 define class 的 patterns

看板Ajax作者 (葉酸酸)時間14年前 (2011/03/23 01:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
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
文章代碼(AID): #1DYDoEOy (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1DYDoEOy (Ajax)