¿Cómo se usan los captadores y establecedores de objetos en JavaScript?

ACTUALIZACIÓN: en mi publicación, a continuación, afirmo que get y set no son operadores legales en Javascript. En realidad, depende de la versión que estés usando. Son legales en ECMAScropt 5 (como señalaron Rick Waldron y Andy Farrell). Esta es la versión más reciente del lenguaje. Todavía no es compatible con todos los navegadores, y dado que, en mi trabajo, tengo que admitir sistemas heredados, no pienso en obtener y configurar como parte del lenguaje.

Específicamente, no es compatible con versiones de IE anteriores a 9. Por lo tanto, si necesita admitir IEs anteriores, ¡no use get and set!

Más información aquí: http://ejohn.org/blog/javascript…

De acuerdo con http://robertnyman.com/2009/05/2…

“Firefox 2.0+, Safari 3.0+, Google Chrome 1.0+ y Opera 9.5+ admiten una forma de facto de getters y setters”

Ese artículo fue escrito en 2009. Desde entonces, Microsoft ha agregado get y set a IE, pero solo a partir de la versión 9.

—–

No creo que el ejemplo que proporcionó sea tan útil, porque alguien que usa o aún puede obtener acceso directo a a .

Él puede escribir oa = “chocolate!”

Una de las cosas que hace un descriptor de acceso (un getter o un setter) es actuar como un guardián entre usted (el usuario de un objeto) y las propiedades de un objeto. Si la aplicación va a explotar si a está configurado en una cadena, entonces el hecho de que sea fácil configurarlo en una cadena es un problema.

Aquí hay una forma de lidiar con eso:

  var o = (función () {
   //propiedad privada
   var a = 7;

  // interfaz pública
   regreso {
      getA: function () {
           devolver a ||  0;
     },
     setA: función (valor) {
           if (! isNaN (value)) a = value; 
     }
   };
 }) ()); 

o no tiene acceso a a , porque a no es devuelto por la función que crea o. Observe el () en la última línea. Eso ejecuta la función que crea o. Entonces, el valor de o no es la función: es lo que la función devuelve después de ejecutarse (lo que etiqueté como la interfaz pública), que es un objeto que solo contiene getA y setA.

Sin embargo, aunque o no tiene acceso a a , getA y setA sí, porque se definieron en la misma función principal que a . Esa técnica se llama cierre (http://en.wikipedia.org/wiki/Clo…), y es un aspecto muy importante de Javascript. Significa que las funciones secundarias (funciones dentro de las funciones) tienen acceso a variables y métodos definidos en sus padres. a , getA y setA se definieron dentro de la misma función principal, aunque getA y setA están anidados dentro de un elemento secundario de ese elemento primario y a no lo está. Todos están dentro del mismo cierre.

Después de que se ejecute el código anterior, si console.log (oa), quedará indefinido. Pero si consola.log (o.getA) o console.log (o.setA), obtendrá ‘función’.

Por cierto, no entiendo tu ejemplo. ¿Por qué nombrarías getters y setters byc si fueran getters y setters para a? Presumiblemente, los llamarías getA y setA. ¿O he entendido totalmente mal tu ejemplo?

Además, esto es ilegal en Javascript:

obtener b () {
devuelve esto. a + 1;
}

No puedes escribir “get b ()”. Esa es una declaración sin sentido que generará un error de sintaxis. Debería ser

función getB () {…}

o

var getB = function () {…}

o

var o = {getB: function () {…})

More Interesting

¿Dónde debo comenzar la programación web y cuáles son los lenguajes más útiles para la programación web?

Cómo eliminar extensiones de PHP, HTML y HTM con .htaccess en todas las páginas si PHP nos da una página de error

En su opinión, ¿qué hace que un buen sitio web?

¿Cuál es el método correcto para usar consultas de medios CSS para crear un sitio receptivo con Bootstrap?

¿Cuál es la mejor y la forma más fácil de actualizar los contenidos de la página web sin actualizarla?

¿Cómo serían diferentes los sitios web si se construyeran con una experiencia óptima de pantalla táctil en mente?

¿Cuáles son algunos sitios web como QVC y cómo se usan?

¿Qué plataforma es buena para desarrollar front-end para ideas patentadas, es decir, Vue.js, AngularJS, ReactJS u otra cosa?

¿Qué software / código se utilizó para crear la Base de conocimiento de Evernote?

¿Cuáles son los softwares de código abierto de reserva de hotel basados ​​en web desarrollados en PHP o Java?

¿Cuáles son las mejores herramientas de dibujo colaborativo de código abierto que existen?

¿Por qué la mayoría de los formularios no pueden seleccionar automáticamente su ciudad y estado según el código postal que ingresa?

¿Cuáles son las habilidades esenciales que todo desarrollador web front-end debería saber?

¿Es malo que no tenga una sola prueba escrita para mi aplicación web de inicio escrita en Rails?

¿Por qué ha surgido el triángulo HTML / CSS / JS en lugar de un lenguaje de desarrollo web universal?