Мне нужно создать Javascript объект, который будет вести себя как ассоциативный массив, но с некоторыми функциями, которые вызываются до получения и установки свойств.
Например, задача может быть такой: мы должны создать объект, который будет содержать значение ключа в квадрате, например:
obj.two should be equal to 4,
obj.four should be equal to 16,
obj['twenty one'] should be equal to 441.
Это пример. На самом деле мне нужно сделать настройку операции переопределены тоже. Операции получения и установки отправляются в базу данных, и они не обязательно принимают строки в качестве ключей, а любые типы объектов, из которых он создает запрос к БД.
Как бы я это сделал а) с как можно меньшим количеством сторонних библиотек и б) чтобы он работал на максимально возможном количестве платформ?
Я новичок в JS, я обнаружил, что JS не имеет ассоциативных массивов, полагаясь на возможность определять объекты на лету с произвольными свойствами. Я гуглил и имел идею использовать или даже переопределить lookupgetter (и сеттер), где определить новый метод получения / установки на лету, но я не могу найти, будет ли интерпретатор использовать этот метод каждый раз, когда он встречает новый ключ. В любом случае, похоже, что я не смог бы использовать ничего, кроме строк или, возможно, чисел в качестве ключей.
В Java я бы просто реализовал java.util.Map.
Пожалуйста, помогите мне, как бы я сделал то же самое в Javascript?
редактировать
Я думаю, что получу то, что хочу, если мне удастся переопределить [[Get]]
и [[Put]]
методы, упомянутые здесь http://interglacial.com/javascript_spec/a-8.html#a-8.6.2.1