在以下代碼行中,根據Mozilla JavaScript tutorial的解決方案進行了改編,Ball類從Shape類繼承x,y屬性。通過傳遞構造函數參數繼承屬性
Mozilla page似乎暗示要從Shape繼承x,y,它們必須在Ball構造函數的參數列表中定義(並在Shape.call函數調用中使用)。但爲什麼這是必要的?原始的Shape構造函數不採用任何這些參數。
假設隨機是其他地方定義的函數。
var width = canvas.width = window.innerWidth;
var height = canvas.height = window.innerHeight;
function Shape() {
this.x = random(0,width);
this.y = random(0,height);
}
function Ball(x, y) {
Shape.call(this, x, y);
this.size = random(10,20);
}
Ball.prototype = Object.create(Shape.prototype);
Ball.prototype.constructor = Ball;
這是他們前面的例子上做了說明:
「在這種情況下,我們指定,當我們創建一個新的對象實例繼承屬性,但請注意,你需要將其指定爲即使實例不要求將它們指定爲參數(例如,在創建對象時您可能已經設置了一個隨機值)。「
這似乎是教程代碼中的一個缺陷。除''this'之外''Shape.call'的附加參數被忽略。此外,從「Shape」構造函數中訪問全局變量「width」和「height」會感覺像抽象的抽象。 –
謝謝!我也這麼想。我想知道爲什麼教程說他們需要在'Ball'構造函數中被指定爲參數。 – traincj
我懷疑'Shape'構造函數應該把'x'和'y'作爲參數,而不是隨機初始化它們。那麼這是有道理的。 –