当x时,Javascript原型函数覆盖

时间:2016-05-20 08:17:58

标签: javascript phaser-framework

就我而言,我使用的是Phaser框架。

所以在这个例子中,我扩展了Group类的移相器。每个演员都是' class(Sprite,Group,...)每隔几毫秒调用update()原型。

我的想法是仅在应用程序在桌面上运行时扩展此功能(而不是在手机上运行)。

例如:

var MousePointer = function (game, parent, name) {
  Phaser.Group.call(this, game, parent, name);
  this.init();
};

MousePointer.prototype = Object.create(Phaser.Group.prototype);
MousePointer.prototype.constructor = MousePointer;

MousePointer.prototype.init = function () {
  // ... init
};

MousePointer.prototype.update = function () {
  // Do something when on desktop
};

我无法在update()函数中使用if clausule检查播放器是否在dekstop / tablet / phone上。那么有没有办法在初始化时实际覆盖原型?

例如(伪代码):

if(onPhone)
  MousePointer.prototype.update = parent.prototype.update;
else
  MousePointer.prototype.update = this.update;

2 个答案:

答案 0 :(得分:2)

嗯,你已经为自己写过答案了,还没有?此代码(不在init方法内)。

if(onPhone) {
  MousePointer.prototype.update = function(){//Phone implementation};
} else {
  MousePointer.prototype.update =  function(){//Other implementation};
}

我建议不要开始使用"常规"功能,然后潜在地覆盖它,因为你只是声明它什么都没有。

答案 1 :(得分:2)

我认为更好的方法是编写两个共享相同父级的不同类,然后为它们编写不同的update()实现。然后你可以做类似的事情:

if(phone) {
    var obj = new PhoneMousePointerObject();
} else {
    var obj = new DesktopMousePointerObject();
}
// ... later
obj.update()