Как мне эмулировать магические методы получения / установки __get () и __set () в стиле PHP в 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!
(Вопрос аналогичен следующим вопросам:
)
РЕДАКТИРОВАТЬ: Похоже, эта функция называется «динамическими прокси» и должна появиться в стандарте ECMAScript «Harmony» (вероятно, ES6). Дополнительную информацию можно найти здесь. Новый объект «Прокси» представлен парой методов (например, 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 доступна реализация: узел -прокси.