2009-09-17 8 views
23

¿Hay una manera de simular el método de Python __getattr__ en Javascript?Python en Javascript

que desea interceptar 'consigue' y 'conjuntos' de las propiedades del objeto Javascript.

En Python que puede escribir lo siguiente:

class A: 
    def __getattr__(self, key): 
     return key 

a = A() 
print(a.b) # Output: b 

¿Qué pasa con Javascript?

+1

triste decirlo, pero no la hay. – seth

Respuesta

9

No. El más cercano es __defineGetter__ disponible en Firefox, que define una devolución de llamada para invocar la función cada vez que la propiedad especificada se lee:

navigator.__defineGetter__('userAgent', function(){ 
    return 'foo' // customized user agent 
}); 

navigator.userAgent; // 'foo' 

Se diferencia de __getattr__ en que se llama a una propiedad conocida, en vez que como una búsqueda genérica de una propiedad desconocida.

+2

Wow! Eso es increíble. Ojalá hubiera una versión de navegador cruzada de esto. Haría que la programación de API fuera increíblemente fácil. – orokusaki

3

No en ECMAScript-262 3ª edición estándar.

Próxima 5ª edición (en la actualidad el proyecto), por el contrario, presenta descriptores de acceso en inicializadores de objeto. Por ejemplo:

var o = { 
    a:7, 
    get b() { return this.a + 1; }, 
    set c(x) { this.a = x/2; } 
}; 

sintaxis similar ya es supported by Javascript 1.8.1 (como una extensión no estándar por supuesto).

Tenga en cuenta que no hay "completado" implementaciones ES5 en el momento (aunque some are in progress)

+0

Esto no es lo que la pregunta original estaba pidiendo. –

Cuestiones relacionadas