script print change alertas javascript xulrunner getter-setter

javascript - print - js alert title change



¿Tiene Javascript tener/establecer palabras clave como C#? (3)

Establecedores de JavaScript y Getters:

Por lo general, los métodos de establecimiento y obtención siguen la siguiente sintaxis en los objetos de JavaScript. Un objeto se crea con múltiples propiedades. El método setter tiene un argumento, mientras que el método getter no tiene argumentos. Ambas son funciones.

Para una propiedad dada que ya se ha creado dentro del objeto, el método set es generalmente una declaración if / else que valida la entrada en cualquier momento en que se accede directamente a esa propiedad y se asigna más adelante mediante un código, también conocido como "set". Esto se hace a menudo usando una declaración if (typeof [arg] === ''cierto tipo de valor, como: número, cadena o booleano''), entonces el bloque de código generalmente asigna el nombre de propiedad (específico) al argumento. (Ocasionalmente, con un mensaje que se registra en la consola). Pero no es necesario que devuelva nada; simplemente está configurando la propiedad this.specific para evaluar el argumento. Sin embargo, la instrucción else casi siempre tiene un registro de mensajes (de error) en la consola que solicita al usuario que ingrese un valor diferente para el valor-clave de la propiedad que cumpla con la condición if.

El método getter es el contrario, básicamente. Establece una función, sin ningún argumento, para "obtener", es decir, devolver un valor / propiedad (nother) cuando llama a la propiedad específica que acaba de establecer. Le "recibe" algo diferente de lo que normalmente obtendría en respuesta a la llamada a esa propiedad de objeto.

El valor de los establecedores y captadores se puede ver fácilmente para los valores-clave de propiedad que no desea poder modificar directamente, a menos que se cumplan ciertas condiciones. Para las propiedades de este tipo, use el guión bajo para continuar con el nombre de la propiedad, y use un captador para permitirle llamar a la propiedad sin el guión bajo. Luego use un definidor para definir las condiciones por las cuales se puede acceder y asignar el valor-clave de la propiedad, también conocido como "conjunto". Por ejemplo, incluiré dos definidores y captadores básicos para las propiedades de este objeto. Nota: uso una variable constante porque los objetos permanecen mutables (después de la creación).

const person = { _name: ''Sean''; _age: 27; set age(ageIn) { if (typeof ageIn === ''number'') { this._age = ageIn; } else { console.log(`${ageIn} is invalid for the age''s key-value. Change ${ageIn} to/into a Number.`); return ''Invalid Input.''; } }, get age() { return this._age; }, set name(nameIn) { if (typeof nameIn === ''string'') { this._name = nameIn; } else { console.log(`Change ${nameIn} to/into a(ny) String for the name''s key-value.`); return ''Invalid Input.''; } }, get name() { return this._name; } };

Donde se pone interesante es cuando intenta establecer / asignar un nuevo valor-clave para la propiedad _age, ya que tiene que cumplir el condicional if para ser asignado con éxito, lo que significa que no todas las asignaciones son válidas, etc.

person.age = ''twenty-eight''; /* output: twenty-eight is invalid for the age''s key-value. Change twenty-eight to/into a Number. */ console.log(person.age); // output: 27 (twenty-eight was never assigned) person.age = 28; // output: none console.log(person.age); // output: 28

Observe cómo pude acceder a la propiedad person._age a través de la propiedad person.age gracias al método getter. Además, de manera similar a cómo se restringió la entrada para la edad a los números, la entrada para la propiedad de nombre ahora está restringida / configurada solo a cadenas.

Espero que esto ayude a aclarar las cosas! Además, algunos enlaces para más:

https://johnresig.com/blog/javascript-getters-and-setters/

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

https://www.infragistics.com/community/blogs/infragistics/archive/2017/09/19/easy-javascript-part-8-what-are-getters-and-setters.aspx

Estoy trabajando con XULRunner y encontré el siguiente patrón en un ejemplo de código:

var StrangeSample = { backingStore : "", get foo() { return this.backingStore + " "; }, set foo(val) { this.backingStore = val; }, func: function(someParam) { return this.foo + someParam; } }; StrangeSample.foo = "rabbit"; alert(StrangeSample.func("bear"));

Esto da como resultado que se avise al "oso de conejo".

Nunca he visto este patrón get / set usado en Javascript antes. Funciona, pero no puedo encontrar ninguna documentación / referencia para ello. ¿Es esto algo peculiar de XUL, una característica de lenguaje reciente, o simplemente algo que me perdí? Estoy desconcertado porque estaba buscando específicamente algo como esto hace unos meses y no pude encontrar nada.

Para referencia, al eliminar "obtener" o "establecer" se produce un error de sintaxis. Cambiarles el nombre a cualquier otra cosa es un error de sintaxis. Realmente parecen ser palabras clave.

¿Alguien puede arrojar algo de luz sobre esto para mí o indicarme una referencia?


Según lo sugerido por Martinho, aquí hay algunos enlaces que explican los métodos de obtención / configuración en JS 1.5:

http://ejohn.org/blog/javascript-getters-and-setters/

http://ajaxian.com/archives/getters-and-setters-in-javascript

Sin embargo, tenga en cuenta que no parece que sean compatibles con IE, y algunos desarrolladores tienen preocupaciones (legítimas) sobre la idea de que la asignación de variables tenga efectos secundarios.

get / set no son palabras clave reservadas como señala Daniel. No tuve ningún problema en crear funciones de nivel superior llamadas "obtener" y "establecer" y utilizar el código de ejemplo publicado anteriormente. Entonces asumo que el analizador es lo suficientemente inteligente como para permitir esto. De hecho, incluso lo siguiente parece ser legítimo (si es confuso):

var Sample = { bs : "", get get() { return this.bs; }, set get(val) { this.bs = val; } }