Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/04/2011, 08:49
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: this.form=form ???

buenas,

la explicacion de este concepto es que los eventos definido como atributo tienen un scope o contexto mas complejo a diferencia de lo que se puediera considerar un codigo regular de javascript. por eso, como bien cita panino5001, es posible acceder a cualquier propiedad del elemento sin una referencia explícita. lo que sucede es algo similar a la resolucion de variables en los scopes de las funciones. basicamente, lo que hace el interprete es determinar si dicho token o identificador existe en el scope donde esta definido el evento y luego continua la busqueda en un scope mas alto en la jerarquia hasta encontrar dicho identificador, ya sea como propiedad o variable. en el ejemplo de panino5001, type primero es buscado en el contexto de la funcion, luego en el objeto Element de <input>. es aqui donde termina la busqueda porque en dicho objeto existe la propiedad type. usando ligeramente el ejemplo de panino para señalar lo anterior.
Código:
// type en el contexto de <input> ;
<input type="button" name="bt" onclick="alert(type)"> 

// igual que el anterior ;
<input type="button" name="bt" onclick="type = true; alert(type)">

// type en el contexto de la funcion ;
<input type="button" name="bt" onclick="var type = true; alert(type)">
notese el segundo y tercer input. el segundo input parece declarar la variable type, pero en realidad no se esta creando. lo que hace es buscar la variable o propiedad type de cualquier contexto y le asigna el valor true. si no se encuentra type en ningun scope, se hubiera creado una variable global. en este caso, esta modificando la propiedad type de <input> convirtiendo asi el elemento a tipo text. de modo que el alert mostrara text. el tercer ejemplo es distinto porque esta declarando explicitamente una variable en el contexto de la funcion.

en conclusion, algo similar es lo que sucede con form en el ejemplo original del autor. form es una propiedad de <input>. no obstante, no estamos limitado al contexto de <input>. como antes indique, se extiende hasta el scope mas alto en la jerarquia, de lo contrario las variables globales no serian legibles. lo que significa que podemos acceder a otras propiedades, siempre y cuando en el recorrido de los scopes no exista una propiedad o variable que lo superponga. por ejemplo, forms es la coleccion de formularios y se accede desde el objeto document.

Código:
// forms en document ;
<input type="button" name="bt" onclick="alert(forms)"> 

// forms aqui representa un elemento ;
<form>
<input type="button" name="bt" onclick="alert(forms)"> <br />
<input type="checkbox" name="forms" /> checkbox forms
</form>
en el segundo ejemplo, forms es un <input> porque forms pasa a ser una propiedad del elemento <form> debido a que se le ha asignado como valor al atributo name de un control.

quien tenga el libro Javascript: The Definitive Guide, puede encontrar los detalles en la seccion 17.1.6 de la quinta edicion, o la seccion 19.1.6 de la cuarta edicion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 10/04/2011 a las 08:14 Razón: correcciones literales