1

我正在尝试创建一种强大的方式来“动态”定义类,但我害怕在整个过程中增加不必要的开销。

这是我的创建代码:

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

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

4

1 回答 1

1

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

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

你有什么改进的建议吗?

循环Object.keys(cons)并使用i其他任何东西,但keys[i]容易出错,因为Object.keys不保证任何顺序。它也可能发生bmw.poweris"BMW"bmw.nameis 500

于 2013-03-12T12:08:21.710 回答