在以下代码行中,根据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'作为参数,而不是随机初始化它们。那么这是有道理的。 –