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…
- ¿Qué es mejor para el inicio de sesión y el registro de usuarios, PHP o JS?
- ¿Se crea un nuevo hilo en el back-end cada vez que un usuario inicia sesión en una aplicación o sitio web?
- Cómo obtener JSON a través de la API REST usando PHP cURL
- ¿Cuál es la mejor plataforma autohospedada para crear una red social moderna?
- ¿Cómo son las últimas semanas para un estudiante en una escuela de desarrolladores?
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 () {…})