¿Cuáles son las funciones __defineGetter__()
y __defineSetter__()
en el prototipo de cada Object
?¿Qué son las funciones __defineGetter __() y __defineSetter __()?
Respuesta
Véase el MDN docs here para una descripción y un ejemplo de código:
Un captador es un método que obtiene el valor de una propiedad específica. Un colocador es un método que establece el valor de una propiedad específica. Puede definir getters y setters en cualquier objeto núcleo predefinido u objeto definido por el usuario que admita la adición de nuevas propiedades.
Como se indica en los documentos (y por @ cwallenpoole), las funciones __define[GS]etter__()
ahora están en desuso. Hay muchos más detalles en this article. Creo que la función defineProperty() es ahora la sintaxis preferida.
Para responder a su pregunta, __defineGetter__()
y __defineSetter__()
son la forma antigua/original de crear un captador y un colocador para la propiedad de un objeto. Le permiten usar la propiedad de un objeto como un par nombre/valor, mientras que detrás de las escenas estos pares de nombre/valor son compatibles con las funciones.
Por ejemplo, supongamos que quiere hacer referencia a algunos números aleatorios en rangos fijos. Podría expresar esto como palabras con el máximo del rango y se vería como una propiedad.
var random = {};
random.__defineGetter__('ten', function() {
return Math.floor(Math.random()*10); });
random.__defineGetter__('hundred', function() {
return Math.floor(Math.random()*100); });
Tenga en cuenta que si bien el ejemplo anterior responde a la pregunta, no debe utilizar esta solución. En su lugar debe usar la forma moderna de captadores y definidores desde ES5:
var random = {
get ten() { return Math.floor(Math.random()*10); },
get hundred() { return Math.floor(Math.random()*100); }
};
Cualquiera de las construcciones anteriores que permitirá obtener un número aleatorio como esto:
var myrand = random.ten;
// returns a result in the range 0 to 9
¿No puedo hacer lo mismo con una función, entonces cuál es el uso específico de getter y setter? –
Sí, puedes. Mi ejemplo no fue excelente porque solo muestra el uso puro de getters y setters. Por lo general, el getter y el setter estarán respaldados por una variable y/o más funcionalidades computacionales. Por ejemplo, si tuviera un objeto llamado Temperatura, podría tener una propiedad C y F que devuelva las temperaturas en C o F. Estas no son realmente propiedades, sino que son métodos (captadores) que se convierten entre el valor base contenido en el objeto. O uno de ellos podría ser una propiedad y el otro un comprador que realiza la conversión. – Guy
- 1. ¿Qué son exactamente las funciones anónimas?
- 2. ¿Las funciones idempotentes son las mismas que las funciones puras?
- 3. ¿Qué tan caras son las llamadas a funciones en JavaScript?
- 4. ¿Qué son las funciones de reemplazo en R?
- 5. ¿Qué son las cookies firmadas y por qué son útiles?
- 6. Las funciones de JavaScript son objetos?
- 7. ¿Las funciones LoadLibrary, FreeLibrary y GetModuleHandle Win32 son seguras?
- 8. "Las llamadas a funciones son costosas" vs. "Mantener funciones pequeñas"
- 9. ¿Qué son las variables puras?
- 10. ¿Son costosas las funciones analíticas de Oracle?
- 11. ¿Las funciones de PostgreSQL son transaccionales?
- 12. ¿Qué son las clases S1 y S2?
- 13. ¿Qué son los parámetros "res" y "req" en las funciones Express?
- 14. ¿Qué son las fortunas?
- 15. ¿Por qué son tan altas las lecturas lógicas para las funciones agregadas en ventanas?
- 16. PHP: ¿Qué son construcciones idiomáticas y por qué las necesitamos?
- 17. Aplicaciones de AI en C++: ¿Qué tan costosas son las funciones virtuales? ¿Cuáles son las posibles optimizaciones?
- 18. * Sutil * ¿Diferencias entre las funciones VB y las funciones Convert.To *?
- 19. ¿Cuáles son las ventajas de las funciones "aplicar"? ¿Cuándo son mejores para usar que "para" bucles, y cuándo no?
- 20. ¿Qué es boxeo y desembalaje y cuáles son las compensaciones?
- 21. ¿Qué son lzo y lzf, y las diferencias?
- 22. ¿Las funciones anónimas son una mala práctica en JavaScript?
- 23. ¿Son dos funciones iguales?
- 24. ¿Qué son las extensiones OpenGL, y cuáles son los beneficios/compensaciones de usarlas?
- 25. ¿Declaras que las funciones específicas de tu módulo son estáticas?
- 26. Cuando los bloques son más útiles que las funciones (ruby)?
- 27. ¿Qué son las asas? IntPtr
- 28. ¿Qué son las API privadas
- 29. ¿Qué son las variables estáticas?
- 30. R: ¿Qué son las tragamonedas?
[obsoleta] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineGetter) :-) – cwallenpoole
¿Significa "viejo" y "actualmente no está en uso"? –
@DOtNET Ninja - "Viejo, ya no es compatible, y no debe utilizarse, pero todavía están allí para no romper la compatibilidad con las personas que ya los usan". – vcsjones