Un poco sobre mí. He estado escribiendo código desde que tenía unos 10 años. En la escuela secundaria, conseguí un trabajo haciendo programación web con Python, y realmente me enamoré del software en ese momento y del desarrollo de software, y desde entonces he sido un aprendiz constante. Pasé la mayor parte de mi carrera trabajando en la web y en el backend, y en los últimos años, probablemente seis u ocho años, he estado trabajando principalmente con Node en el ecosistema de JavaScript y TypeScript.
Así que realmente me interesé en los proxies porque he hecho una cantidad considerable de código .NET y C Sharp, y en C Sharp, tienes un concepto de getters y setters en un objeto, y te permite inspeccionar sigilosamente diferentes operaciones en ese objeto, y los proxies funcionan de manera similar pero para JavaScript. Así que me interesé mucho en los proxies para tratar de entender cómo puedo hacer que eso funcione porque realmente me encanta cuando puedes usar objetos como lo harías normalmente, pero por debajo, puedes entender exactamente qué está sucediendo.
Entonces, hay muchos métodos de proxy, y los métodos de proxy se utilizan para configurar trampas, por lo que puedes observar algunas de las capacidades inherentes de JavaScript para realizar diferentes funciones, eso es lo que es una trampa. Hoy vamos a usar los métodos get y set porque son simples y fáciles de entender, y no estoy tratando de profundizar demasiado con el poco tiempo que tenemos.
Algo que debes saber cuando estás usando un proxy es que realmente también necesitas usar reflect, por lo que el objeto reflect se utiliza para redirigir todas las operaciones al objeto original, por lo que si piensas en el proxy como algo que está al frente y estás escuchando el método set, cuando alguien intenta establecer, quieres usar el objeto reflect para finalmente redirigir esa operación y establecer el valor en ese objeto. La razón por la que haces esto está relacionada con evitar problemas de herencia, por lo que si creas un proxy y luego intentas heredar de él y no usas reflect, obtendrás una funcionalidad extraña donde en realidad estás cambiando el objeto original, no el objeto heredado.
Entonces, comencemos con una demostración básica, creemos un objeto de estado usando un proxy para observar los cambios en ese objeto. Crearemos un controlador de proxy, es la forma más fácil, sé que eventualmente tendré que crear un nuevo objeto, un nuevo proxy, y crearemos un objeto y nuestro controlador será nuestro controlador de proxy, por lo que sabemos que nuestro controlador de proxy será un tipo de controlador de proxy y ahí es donde tenemos nuestros métodos get y set, así que creemos esos ahora, propiedad objetivo y establecer valor de propiedad objetivo. El método get simplemente devuelve el objetivo, la propiedad en un cierto objetivo y el método set establece el valor de una propiedad en un objetivo, así que aquí diremos obteniendo valor de propiedad valor, y aquí diremos estableciendo propiedad, oops y usaremos la API reflect y así es como podemos, simplemente imita la API de proxy directamente y nos permite no tener que preocuparnos por lo que realmente sucede debajo, solo queremos inspeccionar donde nos importa y observar el cambio. Hay una pieza adicional que nos importa aquí y se llama el receptor y queremos agregarlo aquí. El receptor proporcionará al objeto reflect ese contexto adecuado. Aquí tenemos nuestro get, nuestro set, simplemente interceptamos estas operaciones y las registramos, bastante simple.
Para esto, creemos en nuestro estado, una persona, diremos primer nombre, Will. Y agreguemos también un apellido. Johnston, bien. Y luego, para ver realmente qué está sucediendo aquí, tendremos que console.log, state.person.firstname. Entonces, lo que esperamos aquí es que registre, ya sabes, obteniendo persona aquí. Podrías esperar que también registre obteniendo primer nombre. Veremos si lo hace en un segundo. Spoiler alert, no lo hace. Y solo voy a decir aquí, y lo llamaré William. Intentaremos establecer el primer nombre y eso está bien. Bien. Ten en cuenta que cuando creamos este proxy, podemos usar state como un objeto normal. No tenemos que preocuparnos. Entonces, si tienes, normalmente usarás una biblioteca que podría estar utilizando un proxy en el fondo.
Comments