2012-06-09 13 views
6

Sto seguendo un tutorial JavaScript e sono in grado di completarlo. Ma il problema è che non capisco cosa stia facendo una delle linee. Ho una funzione setAge() e successivamente dopo aver creato un oggetto susan ho impostato una delle proprietà su quell'oggetto come nome della funzione? Non capisco perché questo è fatto. Non sarei in grado di utilizzare la funzione/metodo senza farlo?Noob Concern: utilizzo della funzione JavaScript

Il codice tutorial:

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

var susan = new Object(); 
susan.age = 25; 
susan.setAge = setAge; //how the hell does this work? 

// here, update Susan's age to 35 using the method 
susan.setAge(35); 

risposta

8

È assegnando susan 's struttura setAge alla funzione sopra definito,

function (newAge) { 
    this.age = newAge; 
}; 

che è una funzione che accetta un argomento. Quando susan.setAge(35); si chiama, this farà riferimento al chiamante, susan, aggiornando la sua età di 35.

La confusione potrebbe essere da setAge essere usato due volte. La funzione di Susan viene definita sul lato sinistro, il lato destro è già definito. Ad esempio:

susan.letMyAgeBe = setAge; 
susan.letMyAgeBe(35); 

funziona lo stesso. setAge è anche "riutilizzabile":

harry = new Object(); 
harry.iAmThisOld = setAge; 
harry.iAmThisOld(55); 

Demohttp://jsfiddle.net/7JbKY/2/

-1

questa è una questione di portata e la chiusura. Per maggiori informazioni in proposito, ti consiglio di leggere questo articolo: http://nesj.net/blog/2012/03/javascript-scope-and-closure/

+0

Questa domanda non ha nulla a che fare con l'ambito o la chiusura. Riguarda il fatto che le funzioni sono oggetti proprio come qualsiasi altra cosa in javascript. Come tali possono essere passati come parametri, assegnati a variabili, ecc. – jatrim

0

Funziona a causa di ambiti variabili.

La prima variabile setAge è solo una funzione e si può chiamare come: setAge(24) Non è così molto diverso da quello function setAge(age) {this.age = age}

Dopo aver dichiarato la variabile setAge e impostare il suo contenuto ad una funzione, è possibile impostare un altro variabile a questa variabile. Quello che stai facendo nell'oggetto è solo questo. Dopo aver scritto susan.setAge = setAge; la proprietà setAge dell'oggetto sarà uguale alla precedente variabile setAge che è una funzione. Quindi, è possibile chiamare susan.setAge().

0

vediamo cosa si fa nel code-

var setAge = function (newAge) { 
    this.age = newAge; 
}; 

qui una funzione è definita che cambierà l'età variabile un oggetto a quello specificato mentre si chiama la funzione.

var susan = new Object(); 
susan.age = 25; 
susan.mynewageis = setAge; 

qui stiamo impostando un valore predefinito di susan.age che sarà modificato dalla funzione e stiamo impostando il valore della funzione di susan.mynewageis variabili per rendere la funzione disponibile successivo in qualsiasi altro caso .

susan.mynewageis(35); 

qui si imposta il valore di susan.age su 35 come specificato quando si chiama la funzione.

Stavo per pubblicare questa risposta, ma per errore ho premuto il pulsante Invia e inviato risposta incompleta.

Problemi correlati