OK、JavaScript OOP で継承を実装するために、ほとんどの手法を修正しました。Java プログラマーとして、私は古典的なアプローチに興味がありますが、ここに問題があります。次のようなクラスを作成したいとしますAnimal
(実際のクラスではないことはわかっていますが、この用語を使用させてください)。
function Animal(name){
this.name = name;
}
Animal.prototype.getName = function() {
return this.name;
}
これは私の最初の意図では具体的なクラスであることに注意することが重要です。スーパークラスとして使用するだけでなく、インスタンス化したいと考えています。Animal
それぞれ独自の名前を持つ 複数のインスタンスを作成する場合があります。
このクラスを拡張する方法として、次の方法があります。
function Cat(name, owner) {
this.name = name;
this.owner = owner;
}
// ALTERNATIVE 1:
Cat.prototype = Object.create(Animal.prototype);
// ALTERNATIVE 2:
Cat.prototype = new Animal('LOLA');
// END OF ALTERNATIVES
Cat.constructor.prototype = Cat;
Cat.prototype.jump = function() {
alert(this.name + " jumping");
}
ALTERNATIVE 1では、スーパークラスのメソッドを継承するだけで、実際にname
は Cat でプロパティを再定義する必要があります。ALTERNATIVE 2では、実際には何も変更されません。チェーン内に、name
まったく役に立たないプロパティを保持するオブジェクトがもう 1 つあるだけです。それはすべてのCat
インスタンスで同じです。
ここでのポイントはAnimal
、独自の名前でクラスを作成し、それを拡張するとすぐに破棄するということです。Animal
私が望んでいるのは、プロパティとメソッドの両方を継承する方法であり、何よりも、コンストラクターを再利用できるようにしたいと考えています。