私は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を作成するためのベストプラクティスは何ですか?他の人を拒否するためにどのようにベンチマークできますか?