Этот супер скрыт, и только иногда полезный;-)
можно использовать цепочку прототипа для создания объекта, который делегирует к другому объекту, не изменяя исходный объект.
var o1 = { foo: 1, bar: 'abc' };
function f() {}
f.prototype = o1;
o2 = new f();
assert( o2.foo === 1 );
assert( o2.bar === 'abc' );
o2.foo = 2;
o2.baz = true;
assert( o2.foo === 2 );
// o1 is unchanged by assignment to o2
assert( o1.foo === 1 );
assert( o2.baz );
Это только покрывает 'простые' значения на o1. Если Вы изменяете массив или другой объект, то прототип больше не 'защищает' исходный объект. Остерегайтесь каждый раз, когда Вы имеете {} или [] в Определении класса / прототип.
Проблема, которую вы видите, связана не с вашим кодом, а с вашей клавиатурой. В зависимости от технологии клавиатуры количество и комбинации клавиш, которые вы можете нажимать одновременно, различаются. Я сделал код, очень похожий на ваш, пару лет назад, и я помню, что у меня была та же проблема, о которой вы упомянули, в то время как с моей нынешней клавиатурой этого больше не происходит (похоже, она может поддерживать до пяти одновременных букв, в то время как старая поддерживала три) .
Я бы порекомендовал использовать библиотеку Keypoll, вы можете найти ее здесь: http://code.google.com/p/bigroom/wiki/KeyPoll .
Что касается того, сколько клавиш вы можете удерживать, я не уверен, но попробуйте использовать ctrl, shift, как обычно, не учитываются в пределе (я не тестировал это во Flash / ActionScript).
Я считаю, что проблема также связана с аппаратной клавиатурой. Я сам тестировал код на своей клавиатуре, и я не могу одновременно нажать более 3 клавиш на клавиатуре без USB.
Теперь в вашем примере это не должно быть проблемой, потому что вам никогда не понадобится нажать более 3-х клавиш. Но будьте осторожны! Есть еще одно ограничение, которое, похоже, связано с аппаратной клавиатурой, и оно связано с близостью клавиш, которые вы нажимаете, друг с другом.
Например, при попытке вашего кода казалось, что я не могу получить KEY_UP, когда У меня было два других ключа KEYed_DOWN (то есть постоянно нажатых) рядом с тем, который я KEYing_UP (так что тот, для которого я хочу получить событие key_up). Поэтому я считаю, что ваш код работает только с клавишей со стрелкой влево. Ваши клавиши со стрелками вверх, вниз и вправо, вероятно, каким-то образом