我对JS中的原型继承还很陌生,我遇到了一个奇怪的错误,我无法理解。我们正在用canvas编写一个游戏,我们有如下代码:

function GameObject() {
    // Generic object that everything inherits from
    this.x = 0;
    this.y = 0;
    this.dx = -0.5;
    this.dy = 0;
    this.width = 0;
    this.height = 0;
    this.sprite = new Image();
    this.sprite.src = "";
}

function Block(x,y) {
    this.x = x;
    this.y = y;
    this.width  = 2 * TILE_SIZE;
    this.height = 2 * TILE_SIZE;
    this.sprite.src = "images/block/block3.png";
    blocks.push(this); // Manager array
}

Block.prototype = new GameObject();
Block.prototype.constructor = Block;

这个代码工作正常。请注意,TILE_SIZE是在块脚本后面包含的单独文件中定义的—这里似乎不存在此问题。但是当我们添加以下代码(在Block函数之后)时:
function Block_Turret(x,y) {}
Block_Turret.prototype = new Block();
Block_Turret.prototype.constructor = Block_Turret;

我得到一个未捕获的引用错误,即块函数中未定义平铺大小!似乎孩子正在破坏父对象,我不知道为什么会这样-这似乎是一个相当简单的继承场景。提前谢谢!

最佳答案

第一部分代码工作是因为在引用变量的第二部分代码之前,您不会调用引用TILE_SIZE(即Block)的函数,并产生引用错误,因为正如您所解释的,它尚未定义。与继承无关,只是普通的老js。
要详细说明的是,在调用函数之前不会执行函数的内部内容,因此只要语法合法,就不会有错误,即使定义了函数,也像您一样,将其用作引用。
结构应该改变。独立的配置细节自然应该包含在依赖代码之前(想想旧的C标准)。

关于javascript - JavaScript-子继承中断父项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9659506/

10-16 14:40