Как мне эмулировать магический метод получения / установки в PHP в стиле __get () и __set () в 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 доступна реализация: node-proxy .