作者B9 (叶酸酸)
看板Ajax
标题[ js ] 几种 define class 的 patterns
时间Wed Mar 23 01:29:47 2011
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