2011-03-12 10 views
12

Nuovo Javascript, lettura Javascript di Crockford: The Good Parts (tra le altre cose)Perché i metodi di supporto sono usati frequentemente in Javascript?

Nel capitolo 4 relativo alle funzioni Crockford mostra come preservarlo nella funzione esterna per l'utilizzo in funzioni interne, che io capisco.

La mia domanda è, nel suo codice di esempio e una tonnellata più piace, perché usare questa funzione di supporto:

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

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

E 'forse perché add() è seduto in ambito globale, mentre il valore è in myObject, quindi ho bisogno di copiare questo (myObject) quindi trasferire a globale dove posso aggiungere add()?

Altrimenti non sono sicuro del motivo per cui ho bisogno della funzione di supporto?

risposta

13

In questa sezione del libro sta dimostrando che è normale utilizzare that quando si accede all'oggetto this del genitore di una funzione.

Non è necessario utilizzare una funzione di supporto per eseguire ciò che fa il codice. È solo un esempio per illustrare come risolvere i problemi dell'ambito scoping con l'oggetto this.

+0

Mi stavo chiedendo se fosse solo un'illustrazione di quel concetto. Grazie –

+1

buona risposta credo di aver perso "quello". – airmanx86

2

Incapsulamento. Il helper() nell'esempio esiste solo nell'ambito di myObject.double() non sarà disponibile/visibile al di fuori di esso. Credo che sia chiamato metodo privato invece di funzione "helper".

1

Il libro dice anche "questo è legato al valore sbagliato". Il valore "errato" di "questo" è l'oggetto globale? Il modo in cui Crockford lo risolve mi rende incerto. Non avrebbe potuto aggiustarlo in un modo più familiare alle persone con uno sfondo "classico" semplicemente chiamando this.helper(), cioè rendendo helper() un metodo pubblico? Direi di sì e suppongo che lo abbia fatto nel modo in cui lo ha fatto solo per (anche) mostrare una soluzione alternativa che utilizza ancora un modello di invocazione di funzione, ma vorrebbe che fosse confermato; essere nuovo di javascript non sono sicuro che le mie ipotesi siano corrette.

Problemi correlati