2010-07-21 21 views
5

Estoy estableciendo un punto de interrupción en el código siguiente donde dice "punto de interrupción". También se agrega una expresión de reloj para dataStore.firebug me está diciendo erroneamente que mi variable no está definida

function(){ 
    var self = {}; 
    var dataStore = []; 
    var areEq = UNAB.objectsAreEqual; 

    self.put = function(key, value){ 
    /*breakpoint*/ dataStore.push({key:key, value:value}); 
    } 
    return self; 
} 

En este punto de interrupción, Firebug me dice que "ReferenceError: almacén de datos no está definido". Los mismos resultados al intentar examinar "areEq". Sin embargo, dataStore.push se ejecuta sin error. Una estrangulación adicional: agregar una expresión de reloj para "self" no muestra el objeto propio que espero, con una propiedad, "put", sino el objeto "window".

¿Alguna idea de qué diablos está pasando?

Respuesta

1

Creo que esto es un error de Firefox. Si establece un punto de interrupción en var dataStore = []; luego continúe, cuando llegue al punto de interrupción en put(). obtienes un alcance de cierre (en Firebug 1.6). Ese alcance tiene DataStore y uno mismo. Creo que Firefox está optimizando el alcance del cierre, quizás porque el código no tiene ningún sentido: no hay forma de acceder a DataStore.

Un caso de prueba completa con el tiempo aparecerá en http://getfirebug.com/tests/script/stackoverflow/dataStoreIsNotDefined.html

ver también https://developer.mozilla.org/en/DOM/window.self

+0

Gracias por confirmar que no estoy loco (al menos no de esta manera en particular). Y gracias por informar el error. – morgancodes

1

Probablemente self está siendo resuelto por Firebug y probablemente también por Firefox en el alcance global como refiriéndose a la ventana actual. Si elige un nombre diferente que no sea "self", su código debería hacer felices a todos.

+0

Usted es correcta. 'window.self' es lo mismo que' window'. El código del OP en sí es JavaScript perfectamente correcto y se ejecutará sin errores, pero parece que el depurador Firebug de alguna manera tiene el contexto incorrecto cuando se rompe. – casablanca

+0

He estado creando "clases", usando var self- {} durante más de un año, muchas docenas de veces, y nunca tuve un problema consigo mismo. Aunque intentaré algo más. ¡Gracias! – morgancodes

+0

Reemplacé "self" con "_this" y obtuve el mismo comportamiento. ¡Molesto! ¡Extraño! – morgancodes

Cuestiones relacionadas