我对此代码有一个奇怪的问题
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。
答案 0 :(得分:0)
首先,代码有点多余。这是一个简化的代码版本,带有一个工作演示。
答案 1 :(得分:0)
当您将数组(或对象参数)传递给函数时,它不会被复制,该函数会接收对该数组的引用。当您执行this._keys = keysPressed;
时,_keys
包含相同的引用。当您稍后执行this._keys.clear();
时,您正在修改该数组。
我怀疑发生了什么事情,你正在使用与前一次调用相同的数组调用_setKeys()
。因此,当它调用this._resetKeys()
时,它会清除该数组。
您需要根据需要创建新数组,可能是在接收它们作为参数时复制它们或将它们作为值返回。