Как эмулировать PHP-стиль __get() и __set() magic getter/seters в JavaScript? Многие говорят, что в настоящее время это невозможно. Я почти уверен, что это возможно, потому что проекты вроде nowjs (http://nowjs.com) делают что-то вроде этого.
Я знаю, что вы можете использовать get и set, но это не работает, когда вы не знаете, каким будет имя свойства. Например, что, если вы хотите, чтобы обработчик события выполнялся при создании нового свойства?
Пример того, что я хочу сделать:
var obj = {};
notify(obj, function(key, value) {
//key is now the name of the property being set.
//value is the value of the property about to be set
console.log("setting " + key + " to " + value);
});
obj.foo = 2; //prints "setting foo to 2"
obj.bar = {a: 2}; //prints "setting bar to [Object]"
//Notice that notify() worked even though 'foo' and 'bar' weren't even defined yet!
(Вопрос аналогичен следующим вопросам:
)
EDIT: Похоже, эта функция называется "динамическими прокси" и должна появляться в стандарте ECMAScript "Гармония" (возможно, ES6). Вы можете прочитать здесь здесь. Новый объект "Прокси" вводится с помощью нескольких методов (I.e. Create() и createFunction()).
Можно сделать следующее:
//Constructing an object proxy (proto is optional)
var proxy = Proxy.create(handler, proto);
proxy.foo = 2; //Triggers 'set' function in the handler (read about it)
Внизу: он не работает в большинстве браузеров, но реализация доступна для Node.js: node-proxy.