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

配列 (またはオブジェクト パラメーター) を関数に渡すと、それはコピーされず、関数はその配列への参照を受け取ります。次に を実行するthis._keys = keysPressed;と、_keys同じ参照が含まれます。後で を実行this._keys.clear();すると、その配列が変更されます。

何が起こっているのかは_setKeys()、前の呼び出しと同じ配列で呼び出していると思われます。したがって、 を呼び出すとthis._resetKeys()、その配列がクリアされます。

必要に応じて新しい配列を作成する必要があります。おそらく、パラメーターとして受け取ったときにコピーするか、値として返すことによります。

于 2012-09-20T16:33:45.120 に答える
0

まず、コードが少し冗長です。これはコードの簡略化されたバージョンで、動作するデモがあります。

http://jsfiddle.net/qz7q6/

于 2012-09-20T16:10:11.450 に答える