2016-05-20 10 views
2

私の場合、私はPhaserフレームワークを使用しています。JavaScriptのプロトタイプ関数のオーバーライド時x

この例では、フェイザーのグループクラスを拡張しています。すべての「アクター」クラス(スプライト、グループ、...)は、数ミリ秒ごとに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 
}; 

私はおそらくプレイヤーはdekstop /タブレット/携帯電話上にあるかどうかを確認するためにupdate()機能であればclausuleを使用することはできません。初期化時に実際にプロトタイプをオーバーライドする方法はありますか?例えば

(擬似コード):

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

答えて

2

さて、あなたは一種のすでにあなたがいない、あなた自身のための答えを書いていますか?このコード(initメソッド内にはありません)。

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

あなただけの何のためにそれを宣言しているので、私は、「通常の」機能をオフに始まり、その後、潜在的にそれをオーバーライドに対して助言します。

2

私は、これを行うより良い方法は、同じ親を共有する2つの異なるクラスを作成し、それに異なるupdate()の実装を書くことだと思います。次に、次のようなことをすることができます:

if(phone) { 
    var obj = new PhoneMousePointerObject(); 
} else { 
    var obj = new DesktopMousePointerObject(); 
} 
// ... later 
obj.update() 
関連する問題