实例原型对象静态行为?

时间:2013-02-25 10:02:42

标签: javascript windows-8 prototype windows-store-apps winjs

我正在尝试使用HTML / Javascript和WinJS制作适用于Windows 8的游戏,而且我现在遇到“原型”在我不希望它们时静态表现的问题。我从来没有在这个程度上使用过Javascript,或者涉及到如此多的对象,所以我可能犯了一个非常简单的错误,但我无法理解是什么。

首先,我要谈的是一些代码(这是一个很长的类):

(function () {
    "use strict";

    WinJS.Namespace.define("Race", {
        Car: WinJS.Class.derive(
            Race.Common,
            //Constructor method.
            function (slotNum, slotData, canvas, stage, preload, pixelScale) {
                this.canvas = canvas;
                this.stage = stage;
                this.preload = preload;
                this.pixelScale = pixelScale;

                this.slotNum = slotNum;
                this.slotData = slotData;
            },
            //Instance properties and methods.
            {
                /** Properties **/
                slotNum: 0,
                slotData: {},
                position: { x: 0, y: 0, r: 0 },
                lastPosition: { x: 0, y: 0, r: 0 },

                /**Methods **/
                /**
                 *
                 */
                calcRotation: function () {
                    //get angle between last position and current position

                    this.lastPosition.r = this.position.r;
                    this.position.r = this.getAngle(this.lastPosition.x, this.lastPosition.y, this.position.x, this.position.y);
                },
            },
            //Static properties and methods.
            {
                //Debug properties.
                showDebug: true,
                debugCarColors: ['red', 'yellow', 'blue', 'green'],
            }
        )
    });
}());

因此有四个Race.Car实例,每个实例都有一组不同的slotData。这很好 - 每个实例都有自己的slotData集合和自己的slotNum。我可以使用断点来确认这一点(因为它循环通过汽车,slotData特定于每个实例)。到目前为止,我一直处理的是位置,这似乎也能正常运作。

然而,我遇到的问题是lastPosition。这被设置为 last 汽车的lastPosition,而不是汽车的lastPosition。我想在WinJS.Class.define的“实例成员”部分(而不是静态成员)中定义它,并使用this.lastPosition使这一点显而易见。

为什么它不像我预期的那样表现,我做错了什么? 非常感谢

1 个答案:

答案 0 :(得分:1)

实例化对象时,请尝试在构造函数中将其添加为默认值,如下所示:

function (slotNum, slotData, canvas, stage, preload, pixelScale) {
            this.canvas = canvas;
            this.stage = stage;
            this.preload = preload;
            this.pixelScale = pixelScale;

            this.slotNum = slotNum;
            this.slotData = slotData;
            this.lastPosition = { x: 0, y: 0, r: 0 };
        },

干杯: - )