2010-04-23 21 views
18

Al codificar JavaScript a veces almacena la referencia del objeto this en una variable local para diferentes propósitos (para establecer el alcance adecuado, para ayudar a los ofuscadores de código, etc.). Hay codificadores que prefieren aliasing this a that para que sea obvio su intención. Otros chicos usan self ya que apuntan al objeto en sí. Incluso vi códigos fuente donde me era la referencia y sigue teniendo sentido. Ciertamente hay otros.que, yo o yo, ¿cuál prefiere en JavaScript?

¿Cuál debería preferir? ¿Hay una convención sobre la cual usar o solo es cuestión de gusto?

+1

Tenga en cuenta que la programación de fondo parece ser un factor principal (¿el principal?): los que utilizan (d) Smalltalk o Python o aprendido de aquellos que los usaron, tienden a usar 'uno mismo'. – outis

Respuesta

42

Yo personalmente uso that, pero cualquier otra cosa que esté clara está bien.

yo no usaría self porque la variable global/window -property self ya existe como una referencia a window. Aunque es totalmente inútil (por lo que es probable que la atención que está sombreado que nadie), que aumenta ligeramente el riesgo de errores tontos pasando inadvertido:

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

Considerando lo siguiente:

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

Ligeramente artificial, pero JavaScript es tan descuidado al permitir que los errores se deslicen, realmente no deseas hacerlo más.

+0

Otro contratiempo es olvidar 'var' al asignar a' self'. IE * odia * esto. –

+0

Sí, buen viejo IE y su diversión de asignar a la ventana de propiedad. Aún así, al menos arroja un error que le indica que ha realizado una mala práctica. Incluso si el mensaje de error es irremediablemente engañoso. – bobince

2

Hay una naranja en su canasta de manzanas allí, this tiene un significado contextual muy específico. La elección es realmente entre self y me de esas opciones. Entre esos ... tú eliges, no importa de ninguna manera la preferencia personal.

this se refiere al contexto en el que está, por lo que no es realmente una "opción" sin introducir mucha confusión y es fácil cometer errores. Veo que self usó mucho más que me (en código de ejemplo, marcos, bibliotecas, etc.). Es solo preferencia, pero estoy de acuerdo self es más atractivo, no estoy seguro de por qué ... otra vez solo mi preferencia.

+2

Me gusta 'me' porque son dos letras menos para escribir ... pero realmente no importa mientras seas * consistente *. –

+2

@codeka - gran punto, la consistencia es * mucho * más importante que la elección del nombre aquí –

+2

De acuerdo en el punto de consistencia. Puede ser que la elección revele la experiencia de un programador en otros idiomas. 'self' es la versión de Delphi de' this' y 'me' es la versión de VB. Hasta donde yo sé, 'that' no se usa en ningún otro idioma. –

1

Bueno, personalmente estoy tratando de mejorar para hacer que la variable signifique algo un poco más que "esa cosa que necesito más tarde". A menudo necesitas esas variables temporales en situaciones que se vuelven un poco retorcidas; puede haber dos o más capas de escondites temporales this para realizar un seguimiento.

Así, por ejemplo, en una configuración de jQuery, que podría utilizar algo que tenga en cuenta el tipo de elemento que un this escondite temporal debe contener:

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

Al utilizar el prefijo "$" en las variables es una buena manera de para realizar un seguimiento de si el objeto ha sido "jQuery -ized" o no :-)

Cuestiones relacionadas