代码之家  ›  专栏  ›  技术社区  ›  Paul Michaels

在Windows应用商店中使用javascript类

  •  0
  • Paul Michaels  · 技术社区  · 13 年前

    我有以下类定义:

    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 ,我看不出我做错了什么。

    2 回复  |  直到 13 年前
        1
  •  0
  •   GotDibbs    13 年前

    既然你已经定义了 gameEngine.interaction 作为一个在实例声明中包含成员的类,您需要首先实例化它的一个实例。因此,您需要这样做:

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

    如果您定义了 interaction 类成员直接在Namespace中,而不是在class中,您不需要实例化它。另一种选择是直接在命名空间中实例化类,如:

    var gameEngine = WinJS.Namespace.define("GameEngine", {    
    
    interaction: new WinJS.Class.define(
    ...
    
        2
  •  0
  •   Divey    13 年前

    第一个论点 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);
            }
        }
    ),
    ...