2013-02-25 133 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

相关问题