0

我对这段代码有一个奇怪的问题

Moonbeam.Input.KeyboardState = function Moonbeam_Input_KeyboardState() {
    this._keys = new Array(2);
    this._resetKeys(); 
    } 

    Moonbeam.Input.KeyboardState.prototype = {

    _resetKeys: function Moonbeam_Input_KeyboardState$_resetKeys() {
        this._keys.clear();
    },

    _SetKeys: function Moonbeam_Input_KeyboardState$_SetKeys(keysPressed) {
        this._resetKeys();
        this._keys = keysPressed;
    }
}

我调用 _SetKeys 函数并传入一个值,在 this._resetKeys(); KeysPressed 包含值,在 this._keys = KeysPressed 行上,从调用 _resetKeys() 返回后,keysPressed 不包含值。

这不是我所期望的行为,但 javascript 不是我的专长。

谁能告诉我这是我做错了什么?

这就是 javascript 的工作方式吗?如果是,我看不出你如何进行递归。

我也尝试添加行 var _keysPressed = keysPressed; 在 _SetKeys 函数中调用 this._resetkeys() 之前,但这也失去了它的价值。

在调用另一个函数期间如何让我的值保持不变?

斯图。

4

2 回答 2

0

首先,代码有点多余。这是代码的简化版本,带有工作演示。

http://jsfiddle.net/qz7q6/

于 2012-09-20T16:10:11.450 回答
0

当您将数组(或对象参数)传递给函数时,它不会被复制,函数接收对该数组的引用。当你这样做时this._keys = keysPressed;_keys包含相同的引用。当您稍后执行时this._keys.clear();,您正在修改该数组。

我怀疑正在发生的事情是您使用_setKeys()与上一次调用相同的数组进行调用。因此,当它调用时this._resetKeys(),它会清除该数组。

您要么需要根据需要创建新数组,要么在将它们作为参数接收时复制它们,或者将它们作为值返回。

于 2012-09-20T16:33:45.120 回答