私はJavaScriptでOOプログラミングを学んでおり、クラスを作成する方法はたくさんあるようです。私は一般的な構造を読んだものの多くを蒸留することができましたが、肥大化を避けるためにプロトタイピングの目的が不足しているような気がします。この「クラス」のプロトタイプ定義を含めると、無意味になります(オブジェクトのサイズを縮小しない)か?この全体的な構造に欠陥がありますか?JavaScriptの適切なクラス構成
おかげで、
var Car = (function() {
//Private fields
var _make;
var _model;
//Constants (protected by encapsulation)
var NUM_OF_WHEELS = 4;
//Private methods
function getDesc() {
return _make + " " + _model;
}
//Public constructor
function thisCar(make, model, color) {
_make = make;
_model = model;
//public properties
thisCar.prototype.color = color;
}
//static properties
thisCar.carsInTheWorld = 50;
//static methods
thisCar.getNumberOfWheels = function() {
return NUM_OF_WHEELS * thisCar.carsInTheWorld;
};
//public properties
thisCar.prototype.color = "";
//public method
thisCar.prototype.startEngine = function() {
console.log(getDesc() + " engine started");
};
return thisCar;
})();
EDIT コメントや、ここで提供されたリンクを読んだ後、私は理解するものです。
プライベートメンバーへのアクセスを必要とするクラスのメンバーは、プロトタイプに追加することはできず、特権が必要です。同様に、コンストラクタ関数にプロトタイプを含めないのが一般的です。
var Car = function (make, model, color) {//Public constructor
//Private fields
var _make = make;
var _model = model;
//Public fields
this.color = color;
//Private methods
function getDesc() {
return _make + " " + _model;
}
//Privileged functions (requiring private members)
this.startEngine = function() {
console.log(getDesc() + " engine started");
};
};
//public method
Car.prototype.sprayPaint = function (newColor) {
var oldColor = this.color;
this.color = newColor;
console.log("Your car has changed from " + oldColor + " to " + newColor);
};
//Public fields (if not declared in constuctor)
Car.prototype.fuel = 0;
//static properties
Car.carsInTheWorld = 0;
//static methods
Car.getNumberOfWheels = function() {
var NUM_OF_WHEELS = 4;
return NUM_OF_WHEELS * Car.carsInTheWorld;
};
本当にありがとうございました。
JSのこの種のコーディングは、個人的には私を嫌にします。それは信じられないほど動的な言語であり、あなたは正しい - すべてを行う多くの方法がある。私はあなたに最終的にJS.Classのようなクラスフレームワークを使用することを切望しています。 –
あなたのコードには多くの問題がありますが、ここで詳しく説明するにはあまりにも多くの問題があります。 JSの正しい*継承のタイプについては、私の投稿を見ることができます。http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html –
コードを見ると、 [MDN](https://developer.mozilla。Object Oriented Javascript – Starx