2011-03-12 34 views
12

Nuevo en Javascript, leyendo el Javascript de Crockford: Las buenas partes (entre otras cosas)¿Por qué los métodos auxiliares se usan frecuentemente en Javascript?

En el capítulo 4, con respecto a las funciones, Crockford muestra cómo conservar esto en la función externa para usar en funciones internas, lo cual entiendo.

Mi pregunta es, en su código de ejemplo y una tonelada más gusta, ¿por qué utilizar esta función auxiliar:

myObject.double = function() { 
    var that = this; 

    var helper = function() { 
     that.value = add(that.value, that.value); 
    } 
    helper(); 
}; 

¿Es tal vez porque add() está sentado a cabo en el ámbito global, mientras que el valor está en myObject, entonces necesito copiar esto (myObject) y luego transferirlo a global donde puedo obtener add()?

De lo contrario, no estoy seguro de por qué necesito la función de ayuda?

Respuesta

13

En esa sección del libro está demostrando que es convencional usar that al acceder al objeto this del elemento primario de una función.

No es necesario utilizar una función de ayuda, haga lo que hace el código. Es solo un ejemplo para ilustrar cómo evitar problemas de alcance con el objeto this.

+0

Me preguntaba si era solo una ilustración de ese concepto. Gracias –

+1

buena respuesta Creo que me perdí "eso". – airmanx86

2

Encapsulación. El helper() en su ejemplo solo existe en el ámbito de myObject.double() ya que no estará disponible/visible fuera de él. Creo que se llama método privado en lugar de función de "ayuda".

1

El libro también dice "esto está ligado al valor incorrecto". ¿El valor "incorrecto" de "este" es el objeto global? La forma en que Crockford lo arregla me da incertidumbre. ¿No podría haberlo arreglado de una manera más familiar para las personas con un fondo "clásico" simplemente llamando a this.helper(), es decir, haciendo de helper() un método público? Supongo que sí y supongo que lo hizo de la manera en que lo hizo solo para (también) mostrar una solución alternativa que todavía utiliza un patrón de invocación de funciones, pero me gustaría tenerlo confirmado; ser nuevo en javascript no estoy seguro de que mis conjeturas sean correctas.

Cuestiones relacionadas