{"id":784,"date":"2024-07-30T21:00:41","date_gmt":"2024-07-30T19:00:41","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=784"},"modified":"2024-07-30T21:00:42","modified_gmt":"2024-07-30T19:00:42","slug":"007-proxies","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/javascript\/javascript-practico\/09-nuevos-tipos-y-caracteristicas-en-javascript\/007-proxies\/","title":{"rendered":"007. Proxies"},"content":{"rendered":"\n<p>En este cap\u00edtulo vamos a ver un tema muy especial que tiene que ver con la <strong>programaci\u00f3n orientada a objetos<\/strong>. Vamos a ver lo que se conoce como <strong>proxies<\/strong>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Un <strong>proxie<\/strong> es un nuevo mecanismo que tiene <strong>Javascript<\/strong> que permite crear un <strong>objeto<\/strong> basado en un <strong>objeto literal inicial<\/strong>. Es muy similar a las <strong>clases<\/strong>, pero en lugar de tener una <strong>clase<\/strong> como un modelo a seguir, tenemos un <strong>objeto literal<\/strong> como un modelo a seguir.<\/p>\n\n\n\n<p>El <strong>proxy<\/strong> va a recibir el <strong>objeto literal<\/strong>, va a generar una copia, y va a permitir que realicemos ciertas operaciones como pueden ser <strong>validaci\u00f3n de propiedades<\/strong>, <strong>tipos de datos<\/strong>&#8230; dentro de la copia que se est\u00e1 creando del <strong>objeto<\/strong> original. Vamos a tener un medio de vinculaci\u00f3n entre el <strong>objeto<\/strong> en el que nos basamos y la copia (o <strong>instancia<\/strong>) que hemos generado, y todo se va a administrar a trav\u00e9s de un objeto especial que recibe el <strong>proxy<\/strong>, que se conoce como <strong>handler<\/strong> (<strong>manejador<\/strong>).<\/p>\n\n\n\n<p>Veamos su sintaxis con un ejm.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const persona = {\n  nombre: \"\",\n  apellido: \"\",\n  edad: 0,\n}\n\nconst manejador = {\n  set(obj, prop, valor) {\n    obj[prop] = valor;\n  }\n}\n\nconst fran = new Proxy(persona, manejador);\n\n\/\/ Damos valores y creamos una nueva propiedad\nfran.nombre = \"Fran\";\nfran.apellido = \"Paredes\";\nfran.edad = 51;\nfran.twitter = \"@franwebsite\";\n\n\/\/ Se genera una vinculaci\u00f3n entre fran y persona\n\/\/ Se crea el twitter en persona tambi\u00e9n\nconsole.log(fran);\nconsole.log(persona);<\/pre>\n\n\n\n<p>Vamos a crear una condici\u00f3n en el <strong>manejador<\/strong> (<strong>handler<\/strong>) para que no se puedan crear <strong>propiedades<\/strong> nuevas. Modificamos nuestro <strong>manejador<\/strong><\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">constmanejador = {\n  set(obj, prop, valor) {\n    if(Object.keys(obj).indexOf(prop) === -1) {\n      console.log(`No existe la propiedad \"${prop}\" en el objeto persona`);\n    }\n    obj[prop] = valor;\n  }\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En este cap\u00edtulo vamos a ver un tema muy especial que tiene que ver con la programaci\u00f3n orientada a objetos. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":766,"menu_order":6,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-784","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"En este cap\u00edtulo vamos a ver un tema muy especial que tiene que ver con la programaci\u00f3n orientada a objetos. [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=784"}],"version-history":[{"count":1,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/784\/revisions"}],"predecessor-version":[{"id":785,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/784\/revisions\/785"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/766"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}