6

私はJSでの実践を最適化するために取り組んでいますが、それでも次の質問に答えるための完璧なベンチマークを構築できませんでした。

JS「クラス」の最良の構造は何ですか?

明らかなパフォーマンスのピークなしに、次のそれぞれを試しました。

(function() { // Scope! as a JS function
    //0.example
    var A = new function() {
            this.x = 0; // Will be constructed on runtime initiation
            A.prototype.afunc = function() {
                // do something
                return this;
            };
        };

    //1.example
    var B = new function() {
            var x = 0;
            B.prototype.bfunc = function() {
                // do something
                return this;
            };
        };

    //2.example
    var C = new function() {
            var x = 0;
            this.cfunc = function() {
                // do something
                return this;
            };
        };

    //3.example
    function D() { // old fashion way
        var x = 0;

        function dfunc() {
            // do something
            return this;
        };
    };

    //4.example
    var E = { // Interface style, but works perfect as an Enum style but I can't extend it
        x: 0,
        efunc: function() {
            // do something
            return this;
        }
    };
})();

しかし、これまでのところ、0〜2の例には拡張するのに最適な機能があり、より優れたOOPルールを適応させることができることに気づきました。

次のうち、クラスコンストラクターとして機能できるのはどれですか。その理由は何ですか。

これは私の大きな問題の1つです。クラスコンストラクターに最適な構造を明確に理解することはできません。クラスを拡張する(そしてそれをスーパー/親コンストラクターとして使用する)場合、問題はさらに悪化します

次のコードは私の使用例です。私の経験では、「クラス」内の柔軟性に関しては、6番目(5)の例を使用するのが最適であることがわかりました。しかし、継承にはまだ注意が必要です。

    //5.example
var F = new function(a, b, c) {
        var x = 0;

        F.prototype.init = function(a, b, c) {
            // do something
            return this;
        };
        // During runtime will compute & initilize
        return this.init(a, b, c);
    };

//6.example
function G(a, b, c) {
    var x;
    var y;

    function init() {
        x = a;
        y = b + c;
        return this;
    };
    return this.init();
};

//7.example
var H = new function(a, b, c) {
        var instance = { // Runtime Construction
            x: a,
            y: b + c,
        };
        // do something
        return init;
    };

一般的なOOP言語で発生するように、拡張と継承を実現することは可能ですか?

私はさまざまなテクニックを試しましたが、どれも私が最適であると確信していません。

//8.example
var I = new F.prototype;
I.prototype.ifunc() {
    // do something
    return this;
}

//9.example
var J = new G(0,1,2);
J.jfunc() {
    // do something
    return this;
}

要約すると、OO JSを作成するためのベストプラクティスは何ですか?他の人を拒否するためにどのようにベンチマークできますか?

4

0 に答える 0