2011-07-26 12 views
27

¿Cuáles son las funciones __defineGetter__() y __defineSetter__() en el prototipo de cada Object?¿Qué son las funciones __defineGetter __() y __defineSetter __()?

+8

[obsoleta] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineGetter) :-) – cwallenpoole

+1

¿Significa "viejo" y "actualmente no está en uso"? –

+0

@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

Respuesta

12

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.

8

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 
+0

¿No puedo hacer lo mismo con una función, entonces cuál es el uso específico de getter y setter? –

+0

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

Cuestiones relacionadas