2013-02-25 129 views
0

我有以下的類定義:在Windows應用商店的應用程序使用JavaScript類

var gameEngine = WinJS.Namespace.define("GameEngine", {  

interaction: WinJS.Class.define(
    function() {}, 
    { 
     destination: 0, 
     currentXPos: 0, 
     handleTouch: function handleTouch(event) { 
      this.destination = event.x; 
      console.log("New destination: " + this.destination); 
     } 
    } 
), 
... 

而且我嘗試使用handleTouch功能在這裏:

WinJS.Namespace.define("drawScreen", { 

DrawScreen: WinJS.Class.define(function DrawScreen() { 
    canvas.addEventListener("MSPointerUp", gameEngine.interaction.handleTouch, false); 

... 

這個問題似乎是gameEngine.interaction.handleTouch未定義。很明顯,我沒有正確聲明或調用interaction類 - 但看着文檔here,我看不到我做錯了什麼。

回答

0

既然你已經定義gameEngine.interaction與在實例聲明的成員類,你需要首先實例化它的一個實例。因此,你需要做這樣的事情:

var gameInteraction = new gameEngine.interaction(); 
canvas.addEventListener("MSPointerUp", gameInteraction.handleTouch, false); 

如果定義所有interaction類成員的直接內部的命名空間,而不是一個類,您就不需要實例化。另一種方法是直接在你的名字空間中實例化類,如:

var gameEngine = WinJS.Namespace.define("GameEngine", {  

interaction: new WinJS.Class.define(
... 
+0

您的第二個建議沒有任何區別 - 它仍然將組成函數視爲未定義。第一個很好,但謝謝。 – 2013-02-26 08:22:08

0

WinJS.Class.define(的第一個參數是構造函數,而第二個參數是成員屬性和函數。試試這個:

interaction: WinJS.Class.define(
    function() {}, 
    { 
     // initialize your class here 
    }, 
    { 
     destination: 0, 
     currentXPos: 0, 
     handleTouch: function handleTouch(event) { 
      this.destination = event.x; 
      console.log("New destination: " + this.destination); 
     } 
    } 
), 
... 
+0

爲了闡明你在這裏所做的是將變量從實例成員聲明向下移動到類的靜態成員聲明中。這也應該是我發佈的其他兩條建議的可行替代方案。 – GotDibbs 2013-02-25 18:57:38

相關問題