さて、ここでの問題は、2つの継承パターン(http://davidshariff.com/blog/javascript-inheritance-patterns/)を疑似クラシックと機能パターンで混合していることです。
コンストラクター関数にメソッドを追加することにより、オブジェクトを作成できます。
function MyClass() {
var privateProperty = 1;
this.publicProperty = 2;
function pivateMethod() {
// some code ...
}
this.publicMethod = function() {
// some code ...
};
}
// inheritance
function SubClass() {
MyClass.call(this);
this.newMethod = function() { };
}
ここで、このクラスのインスタンスを作成すると、すべてのメソッドが再度作成されます。
次に、プロトタイプパターンがあります。
function MyClass() {
this._protectedProperty = 1;
this.publicProperty = 2;
}
MyClass.prototype._protectedMethod = function() {
// some code ...
};
MyClass.prototype.publicMethod = function() {
// some code ...
};
// inheritance
function SubClass() {
MyClass.call(this);
}
SubClass.prototype = new MyClass();
SubClass.prototype.newMethod = function() { };
// OR
function SubClass() {
MyClass.call(this);
}
function dummy() { }
dummy.prototype = MyClass.prototype;
SubClass.prototype = new dummy();
SubClass.prototype.newMethod = function() { };
両方ではなく、これら2つのパターンのいずれかを選択する必要があります。
このフィドルのコードを修正しました:http://jsfiddle.net/dz6Ch/