Скажем, у меня есть объект, подобный следующему:Отслеживать изменения на свойства объекта
Cars = {
"car_one": {
data: {
make: "Ford",
model: "Festiva"
},
img: "car_one.jpg"
},
"car_two": {
data: {
make: "Chevy",
model: "Pinto",
color: "Green"
},
img: "car_two.jpg"
}
...and so on...
}
Я надеялся найти способ контролировать только свойство data
(и все вложенные свойства) для изменений, то будет способный настроить функцию для запуска.
Я искал Object.watch(), но тестирование, похоже, показывает, что мне нужно будет настроить его вручную, чтобы проверить каждое свойство Cars.{some_car}.data
, которое (как показано в моем примере) не является постоянным. Наверное, я надеюсь, что есть менее сложный метод, о котором я просто не знаю.
Если вы используете браузер на основе Gecko, вы можете использовать [getters and setters] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects?redirectlocale=en-US&redirectslug=Core_JavaScript_1 .5_Guide% 2FWorking_with_Objects # Defining_getters_and_setters). Однако они не являются частью ECMAScript и поддерживаются примерно половиной (полной догадки) используемых браузеров. – RobG
Когда-нибудь вы сможете использовать 'Proxy'. Он входит в ECMAScript 6. В Firefox есть текущая реализация, но поскольку стандарт не завершен, я не знаю, насколько он уступчив. Я думаю, что Chrome имеет это, если вы включите его экспериментальные функции JavaScript. – 2013-04-08 01:12:21
@RobG: Вы имеете в виду устаревший синтаксис '__defineGetter__'? ECMAScript 5 получает и устанавливает поведение для свойств, просто используя другой синтаксис. – 2013-04-08 01:16:46