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.power"BMW"ありbmw.nameます500

于 2013-03-12T12:08:21.710 に答える