创建类的函数

时间:2013-03-12 11:40:34

标签: javascript class object

我正在尝试创建一种“动态”定义类的强大方法,但我担心会给整个过程增加不必要的开销。

这是我的创作代码:

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

我做了什么不必要的事吗?你有什么改进建议吗? 请发表您的意见

1 个答案:

答案 0 :(得分:1)

  

我做了什么不必要的事吗?

不是我能看到的,但你需要向我们展示一个实际的用例,而不是演示示例: - )

  

您有任何改进建议吗?

循环Object.keys(cons)并使用ikeys[i]之外的其他任何内容都是错误的,因为Object.keys不保证任何订单。 bmw.power"BMW"bmw.name500也可能发生。