Javascript清除堆栈之间的堆栈?

时间:2012-09-20 15:58:22

标签: javascript

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

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()之前,它也会失去它的值。

如何在调用另一个函数时保留我的值?

STU。

2 个答案:

答案 0 :(得分:0)

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

http://jsfiddle.net/qz7q6/

答案 1 :(得分:0)

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

我怀疑发生了什么事情,你正在使用与前一次调用相同的数组调用_setKeys()。因此,当它调用this._resetKeys()时,它会清除该数组。

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