Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/03/2013, 12:54
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Usar getElementById() como valor de un miembro de un Array

¡saludos gentes!

me sumo al tema para explicar el problema inicial y así evitar que vuelva a repetir el mismo conflicto.

Cita:
Iniciado por dehm Ver Mensaje
Entonces la duda es...¿es posible asignar un elemento referenciado con getElementById() como valor de un miembro del array?
si, es posible, y se hace tal como lo estás haciendo en esta línea:
Código:
cuadro1: document.getElementById ("Cuadro1"),
sin embargo, la razón del error Unhandled Error: Undefined variable: cuadro1 se debe a otra causa. en tu código, la referencia cuadro1 de las líneas restantes —top, left, width, height— no hacen referencia a la propiedad cuadro.cuadro1 sino a una variable que previamente debe existir. por eso el mensaje de error cita Undefined variable. lo más lógico sería pensar que falta agregar this por detrás de cuadro1 para hacer referencia a dicha propiedad del objeto que se está creando:

Código:
...
top: document.defaultView.getComputedStyle(this.cuadro1, '').getPropertyValue('top'),
...
lo cierto es que seguirá mostrando el mismo error, a no ser que exista una variable global con el mismo nombre. esto porque this en el contexto de un objeto literal no hace referencia al propio objeto, sino más bien al objeto padre. el objeto padre bien puede ser Window u otro según sea donde se declare la variable. (en tu caso, la variable cuadro).

en conclusión, no es posible acceder a los identificadores (propiedades o métodos) de un objeto literal mientras éste se está creando. nótese que no significa lo mismo que un método acceder a una propiedad del objeto luego del objeto ser creado.

Código:
// objeto literal en contexto global ;
var obj = {
num: 0,
double: this.num * 2,
ref: this
};

console.log(obj.num, // imprime 0 ;
obj.double, // imprime NaN, se esta multiplicando undefined por 2 ;
obj.ref // imprime el objeto Window ;
);
Código:
// this en un objeto literal creado en el contexto de un constructor ;
function F(){
this.obj = { ref: this };
}

var f = new F();
console.log(f.obj.ref, // imprime objeto F, o similar según intérprete ;
f.obj.ref === f // imprime true, ambos son el mismo objeto ;
);
Código:
// this en un método de un objeto literal ;
var obj = {
prop: 'un valor',
method: function(){ return this.prop; }
};

console.log( obj.method() ); // imprime el string 'un valor' ;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.