¿Cómo emulo PHP __get() y __set() magic getter/setters en JavaScript? Mucha gente dice que esto es actualmente imposible. Estoy casi seguro de que es posible porque proyectos como nowjs (http://nowjs.com) hacen algo como esto.Monitorear todas las propiedades del objeto JavaScript (captadores y definidores de magia)
Sé que puede utilizar get y set, pero estos no funcionan cuando no está seguro de cuál será el nombre de la propiedad. Por ejemplo, , ¿qué ocurre si desea que un controlador de eventos se ejecute cuando se crea una nueva propiedad?
Ejemplo de lo que me gustaría hacer:
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!
(La pregunta es similar a las siguientes preguntas:
)
EDITAR: Parece que esta característica se denomina "proxies dinámicos" y debería aparecer en el estándar "Harmony" de ECMAScript (probablemente ES6). Puede leer más here. Se introduce un nuevo Objeto 'Proxy' con un par de métodos (es decir, Create() y createFunction()).
Se podría hacer esto:
//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)
fondo aquí: no funciona en la mayoría de los navegadores, sino una aplicación está disponible para Node.js: node-proxy.
Esta función llamada proxies es parte de ECMAScript 6 no 5. – Raynos
Buena captura. Revisé mi publicación. ¡Gracias! – BMiner