Ver Mensaje Individual
  #11 (permalink)  
Antiguo 03/03/2010, 14:37
Avatar de buzu
buzu
 
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 2 meses
Puntos: 122
Respuesta: Constructores, y el uso del THIS

Cita:
Es lo mismo, corrijanme si me equivoco.
De hecho, no es exactamente lo mismo, pero en esencia si.

Prueba con esto:

Código Javascript:
Ver original
  1. hazalgo();
  2.  
  3. var hazalgo = function(){
  4.      alert('ya hice algo');
  5. }

Al intentar correr ese código te va a dar un error, ya que cuando asignas una función anónima a una variable, no puedes usar dicha función antes de que haya sido declarada. En este caso estas queriendo usarla antes de declararla y pues te tira un error. Por el otro lado, si solo usas notación literal, lo que se conoce como function literal, si puedes llamar a la función aun antes que haya sido declarada.

Código Javascript:
Ver original
  1. hazalgo();
  2.  
  3. function hazalgo(){
  4.      alert('ya hice algo');
  5. }

En este caso verás que todo funciona correctamente. Ahora, la cosa se pone interesante. Mira:

Código Javascript:
Ver original
  1. onload = hazalgo;
  2.         var hazalgo = function(){
  3.             alert('ya hice algo');
  4.         }

Veras que no pasa nada. Aun cuando la llamada se está haciendo al cargar la pagina, y se supone que para entonces la variable ya ha sido declarada, no pasa nada. Esto es por que la asignación se está haciendo antes de declarar la variable. Sin embargo, si en lugar de asignar directamente la función hazalgo al evento load de window, asignamos una función anónima que a su vez invoque a hazalgo, la cosa cambia:

Código Javascript:
Ver original
  1. onload = function(){
  2.     hazalgo();
  3. }
  4. var hazalgo = function(){
  5.     alert('ya hice algo');
  6. }

Podemos seguir probando con otros ejemplos y curiosidades, pero mi objetivo no es demostrar cuantas curiosidades hay entre estos dos tipos de declarar funciones. Mi objetivo es solo demostrar que aun que en esencia ambos métodos son similares, no son realmente iguales. Sin embargo, sin importar como declares una función, siempre puedes usarla con el operador new para crear una instancia de ese objeto. (Aquellos que argumentan la inexistencia de instancias en javascript, favor de abstenerse de iniciar un debate. Ha sido ampliamente de batido y demostrado que javascript SI tiene instancias.)

Ahora, en cuanto al script, no se por que agregan un método al objeto net, solo para después llamarlo con el operador new. Es un tanto incoherente diría yo.
__________________
twitter: @imbuzu