是否可以扩展已经从另一个类继承的类?

时间:2014-11-14 01:14:05

标签: javascript inheritance easeljs

我知道直接的答案不在这里,但我和几个似乎认为可能的人谈过。这是我的代码:

var Tile = function(xPos, yPos, state) {
    this.createTile(xPos, yPos, state);
}

Tile.prototype = new createjs.Shape();

Tile.prototype.createTile = function(xPos, yPos, state) {
    // debugger;
    this.x = xPos;
    this.y = yPos;
    this.onState = state;

    var fillCommand = this.graphics.beginFill("#969696").command;
    var shapeCommand = this.graphics.drawRoundRect(0, 0, 50, 50, 10).command;

    this.on("click", function(){this.toggleState(fillCommand);});

    stage.addChild(this);
    stage.update();
}

Tile.prototype.toggleState = function(fillCommand) {
    if (this.onState === true) {
        fillCommand.style = "#969696";
        stage.update();
        this.onState = false;
        } else if (this.onState === false) {
        fillCommand.style = "#000000";
        stage.update();
        this.onState = true;
    }
}

如果有人熟悉它,则在easeljs中实现Shape()。基本上我在这里创建一个Tile类来表示小圆角正方形,这些正方形会在按下时改变颜色。语法方面我没有在网页上显示任何错误。我已经有了正确的代码来调用Tile和已经设置的画布,或者我也将代码放在这里。我在这里问的是,我在这个实现中有正确的想法吗?

2 个答案:

答案 0 :(得分:1)

它有点不同寻常,但如果它适合你,那么对你有更大的力量。从Shape继承的更常见的方法是做类似

的操作
Tile.prototype = Object.create(createjs.Shape.prototype);
Tile.prototype.constructor = Tile;

Javascript中的继承有点奇怪,所以,除非你有时间和精力去深陷兔子洞,否则我会建议坚持使用正常工作的东西。如果您确实想要阅读更多内容,这篇文章可以帮助您入门:http://ejohn.org/blog/simple-javascript-inheritance/

答案 1 :(得分:1)

EaselJS撰稿人 - 您绝对可以扩展EaselJS课程。实际上有一个tutorial on the EaselJS site。正如其他人所提到的,JavaScript继承是一种痛苦,并不一定是最好的方法(例如,我总是编写形状/精灵而不是从它们继承。但它完全有可能,只需看看EaselJS层次结构:{ {1}}。

使用您的示例,您应该使用教程中的方法,您可以在其中覆盖初始化,并确保调用超类版本。它有点脏,但广泛使用直到EaselJS 0.7.1(最新版本)。

新方式

更好的是,最新版本的CreateJS(仅在GitHub中作为NEXT版本提供,应该很快被标记并发布到CDN!)有一个全新的继承模型,更容易实现自动注入超级方法,包括调用超级构造函数的能力。

EventDispatcher > DisplayObject > Bitmap

这样更清洁,更易于使用,并且在我们的测试中效果很好!

希望有所帮助:)