Задать вопрос
krdpsr
@krdpsr
loading...

Где ошибка в коде?

есть работающий код:

var программа = { 
	_id : 'id',

	set при_нажатии_вверх(функция)
			{
				if(функция)
				{ 
					нажатие_клавиш.ArrowUp.добавить_ид = this._id   
					this.ArrowUp = функция
				}
				else
				{
					нажатие_клавиш.ArrowUp.удалить_ид = this._id
					this.ArrowUp = null
				}
			},
	ArrowUp : null,

	set при_нажатии_вниз(функция)
			{
				if(функция)
				{ 
					нажатие_клавиш.ArrowDown.добавить_ид = this._id   
					this.ArrowDown = функция
				}
				else
				{
					нажатие_клавиш.ArrowDown.удалить_ид = this._id
					this.ArrowDown = null
				}
			},
	ArrowDown : null,
}


но его надо упростить чтобы не повторять это для каждой клавиши
пытаюсь сделать это в цикле через defineProperty после создания объекта "программа" -

var набор_клавиш = {ArrowUp:'при_нажатии_вверх', ArrowDown:'при_нажатии_вниз', ArrowLeft:'при_нажатии_влево', ArrowRight:'при_нажатии_вправо',}

for (var x in набор_клавиш)
		{
			var код = x
			var команда = набор_клавиш[x]

			Object.defineProperty(программа, команда, {
			    set: function(функция) {
			    	if(функция)
					{ 
						нажатие_клавиш[код].добавить_ид = this._id    
						this[код] = функция
					}
					else
					{
						нажатие_клавиш[код].удалить_ид = this._id
						this[код] = null
					}
			    }
			  })

			программа[код] = null
		}


но не работает
подозреваю что есть синтаксическая ошибка
  • Вопрос задан
  • 88 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@kalsc12345
Неизвестный человек.
var программа = {
  _id: 'id'
};

var набор_клавиш = {
  ArrowUp: 'при_нажатии_вверх',
  ArrowDown: 'при_нажатии_вниз',
  ArrowLeft: 'при_нажатии_влево',
  ArrowRight: 'при_нажатии_вправо'
};

for (var x in набор_клавиш) {
  var код = x;
  var команда = набор_клавиш[x];

  Object.defineProperty(программа, команда, {
    set: (function(код) {
      return function(функция) {
        if (функция) {
          нажатие_клавиш[код].добавить_ид = this._id;
          this[kод] = функция;
        } else {
          нажатие_клавиш[код].удалить_ид = this._id;
          this[kод] = null;
        }
      };
    })(код)
  });

  программа[команда] = null;
}

Так можно упростить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы