形状由矩形继承。这种继承可以通过许多方法来完成。这里我使用了 apply() 和 call()。当 draw 方法是 child 时,从该方法中再次调用基类的 draw 方法。我通过两种方式完成了这件事。一种是制作基类的原型draw方法,另一种是使用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);
};
}
第二种方法:
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;
这两种方法都做类似的事情(在提供输出的情况下)。我知道通过使用 apply() 和 call() 方法我不能直接访问基类的原型。使用 apply() 和 call() 的继承对我来说似乎不那么复杂。如果两者都相同,那么为什么人们不使用 apply() 和 call() 那么多?为什么我需要使用原型?如果我不使用原型并使用 apply() 和 call () 继承基类,我将面临什么问题?