功能来创建类
问题描述:
我想创建一个强大的方式来定义类的“即时”,但我害怕在整个过程中添加不必要的开销。功能来创建类
这里是我创建代码:
function Class(cons,proto) {
var keys = Object.keys(cons);
function _class() {
var i = keys.length;
while(i--) {
this[ keys[i] ] = arguments[i] || cons[keys[i]];
}
}
if(proto) {
var f;
for (f in proto) {
_class.prototype[f] = proto[ f ];
}
}
return _class
}
这里是我要如何使用它
var car = Class({
"name": "A car",
"power": 900
},
{
"honk": function() { alert("honk!") }
});
var bmw = new car("BMW", 500);
bmw.honk(); // -> honk!
console.log(bmw.name, bmw.power); // -> BMW 500
var generic = new car();
generic.honk = function() { alert("custom honk") };
generic.honk(); // -> custom honk!
alert(bmw.honk === car.prototype.honk); // -> true
alert(generic.honk === car.prototype.honk); // -> false
console.log(generic.name, generic.power); // -> A car 900
我做任何不必要的?你有什么改进建议吗? 请发表您的意见
答
我是否在做任何不必要的事情?
不,我所看到的,但你需要向我们展示实际使用情况下这不是一个演示的例子:-)
你有任何改进的建议?
循环执行Object.keys(cons)
和使用i
为别的,但keys[i]
是容易出错,因为Object.keys
不保证任何顺序。它也可能发生bmw.power
是"BMW"
和bmw.name
是500
。
+0
有效点,您在对象中声明属性的顺序不是循环顺序所必需的。谢谢你指出这一点,以后会让我头痛。 – 2013-03-12 12:52:24
在javascript中,没有任何类,所以从某种意义上说它总是在飞行中。人们提出继承的方式有很多种,而这一切都归结为选择你需要的任务。它真的取决于什么1.简化代码的其余部分2.高效运行。基本上,这取决于代码的其余部分 – Jodes 2013-03-12 12:00:31