形状は長方形に継承されます。この継承は、多くの方法で行うことができます。ここでは、apply() と call () を使用しました。draw メソッドが child で呼び出されると、そのメソッドから再び基底クラスの draw メソッドが呼び出されます。私はこれを2つの方法で行いました。1 つは基本クラスの draw メソッドのプロトタイプを作成する方法で、もう 1 つは apply() および call() メソッドを使用する方法です。
最初の方法:
function Shape () {
this.name='Shape';
this.getName = function () {
return this.name;
};
this.draw = function () {
alert("Something");
};
}
function Rectangle () {
Shape.apply(this);
var X=this.draw;
this.name = 'rectangle';
this.id=500;
this.draw = function () {
X.call(this);
};
}
2番目の方法:
function Shape () {
this.name='Shape';
this.id=100;
this.getName = function () {
return this.name;
};
}
Shape.prototype.draw = function() {
alert("Something");
};
function Rectangle () {
this.name = 'rectangle';
this.id=200;
this.draw = function () {
Shape.prototype.draw.call(this);
};
}
Rectangle.prototype = new Shape();
Rectangle.prototype.constructor = Rectangle;
これら 2 つの方法はどちらも同様のことを行います (出力を提供する場合)。apply () および call () メソッドを使用しても、基本クラスのプロトタイプに直接アクセスできないことはわかっています。apply() と call() を使用した継承は、それほど複雑ではないように思えます。両方が同じなら、apply() と call() をあまり使わないのはなぜですか? なぜプロトタイプを使用する必要があるのですか? プロトタイプを使用せず、apply() と call () を使用して基本クラスを継承すると、どのような問題に直面するでしょうか??