2010-05-03 21 views
10

El motor de JavaScript Spider-Monkey implementa la función de devolución de llamada __noSuchMethod__ para objetos JavaScript.Acceda a la propiedad indefinida en JavaScript

Esta función se invoca siempre que JavaScript intente ejecutar un método indefinido de un objeto.

Me gustaría establecer una función de devolución de llamada a un Objeto que se invocará cada vez que se acceda o se asigne una propiedad indefinida en el Objeto.

No he encontrado una función __noSuchProperty__ implementada para JavaScript Objects y soy curioso si hay alguna solución que logre el mismo resultado.

Considere el siguiente código:

var a = {}; 
a.__defineGetter__("bla", function(){alert(1);return 2;}); 
alert(a.bla); 

Es equivalente a [alert(1);alert(2)] - a pesar de que a.bla no está definido.

me gustaría para lograr el mismo resultado, pero a propiedades desconocidas (es decir, sin saber de antemano que una. "Bla" será la propiedad visitada)

Respuesta

4

En la próxima versión de ECMAScript que debería ser bastante fácil, usando Object.observe leer más aquí: http://addyosmani.com/blog/a-few-new-things-coming-to-javascript/

+0

Gracias Moshe. Aceptada esta respuesta, ya que resuelve la pregunta original. – avri

+1

Esta respuesta no resuelve la pregunta. La función que está buscando se llama ['Proxy' y no se implementará en el futuro] (http://stackoverflow.com/q/6429521/1269037). –

2

me gustaría establecer una función de devolución de llamada a una Objeto que se invocará siempre que se acceda o se asigne una propiedad indefinida en el objeto.

Si bien esta no es una respuesta exhaustiva, tenga en cuenta que la asignación a propiedades no definidas de un objeto es una característica clave del lenguaje JavaScript.

También tenga en cuenta que __noSuchMethod__is a non-standard method, implementado por los motores de JavaScript de Mozilla. Hay un open feature request para que esto se implemente en el motor V8 de Google Chrome, pero hasta donde sé, esto no es compatible con otros navegadores.

A partir de Feb de 2014, It looks like this won't be supported any time soon.

+0

Gracias por sus ans wer - Debo refinar mi pregunta de la siguiente manera: ¿Hay alguna manera de hacer lo mismo en el motor de JavaScript de Spider-Monkey? – avri

+0

@avri: 'noSuchMethod' es compatible con SpiderMonkey, pero dudo que encuentre un método incorporado que intente asignar a propiedades no definidas, ya que estas son en realidad características del lenguaje. –

+1

No creo que el hecho de que la asignación a propiedades no definidas de un objeto sea una característica clave del lenguaje JavaScript tenga importancia; de hecho, JavaScript proporciona los métodos __defineGetter__ y __defineSetter__. Considere el siguiente código: var a = {}; a .__ defineGetter __ ("bla", función() {alerta (1); return 2;}); alerta (a.bla); Es equivalente a [alerta (1); alerta (2)] - aunque a.bla no está definido. Me gustaría obtener el mismo resultado pero con propiedades desconocidas (es decir,sin saber de antemano que a. "bla" será el acceso a la propiedad) – avri

2

arriba, chicos creo que tenemos que votar a favor de esta función en Google V8 lista de temas, aquí http://code.google.com/p/v8/issues/detail?id=264

Parece que no hay mucha atención a esta importante función . :(

+0

[Al equipo desarrollador de V8 no le importa] (http://stackoverflow.com/q/6429521/1269037). –

Cuestiones relacionadas