さて、私は他の多くのOOP言語のように、プレーンな古いJavascriptにある種の拡張継承を持たせる方法を見つけようとしてきました。しかし、クラスがプロトタイプを使用して親クラスを拡張すると、そのオブジェクトの各子が親の独自の新しいインスタンスを持つのではなく、変数を共有するという特定の問題が発生しました。例えば:
TestB.prototype = new TestA();
function TestB(){ }
function TestA(){
var num = 0;
this.count = function(){
num ++;
console.log(num);
}
}
var test = new TestB();
test.count();
var test2 = new TestB();
test2.count();
したがって、コードを実行すると、コンソールは次のようになります。
1
2
親クラスから継承される「num」変数がそれぞれのインスタンスに固有であるため、出力は次のようになります。
1
1
これは、プロトタイプが呼び出されたときに、TestBのコンストラクターが呼び出されるたびに1つではなく、TestAの新しいインスタンスが1つだけ作成されるためだと思います。問題は、それを機能させる別の方法を見つけることができなかったことです。
助けてくれてありがとう(そしてこれは実際にはもっと具体的な用途のためですが、問題をきれいに説明するために非常に単純なテストケースを作成したかっただけです。jQueryやprototype.jsなどの外部ライブラリを使用する自由がありませんこの問題を解決するために)