2015-12-15 14 views
11

Stavo analizzando la funzione angular.forEach:Perché angular.for Ogni contesto?

Ecco il codice di angular.forEach:

var values = {name: 'misko', gender: 'male'}; 
var log = []; 

angular.forEach(values, function(value, key) { 
    this.push(key + ': ' + value); 
}, log); 

expect(log).toEqual(['name: misko', 'gender: male']); 

La descrizione del contesto è:

oggetto di diventare contesto (questo) per la funzione iteratore .

mi si avvicinò con alcune domande:

Perché l'uso e quando è utile il parametro contesto?!

Perché usare questo invece la variabile registro?

risposta

6

Nell'esempio che si fornisce, è lo stesso utilizzare this o direttamente il log array. Questo perché callback utilizzato in forEach method e log array sono definiti nello stesso scope.

Tuttavia, potrebbero esserci alcuni casi in cui lo callback è definito all'interno di un diverso scope rispetto allo log array. Poi la chiamata dovrebbe essere simile al seguente:

angular.forEach(values, getNames, log); 

In questo caso, dovremmo usare this all'interno della richiamata in quanto farà riferimento alla log array che è definita in un diverso scope.

EDIT:

Vedi questo codice JSFiddle demo e dopo che mostra ciò che ho spiegato.

+0

Ohhhhhh .... ora posso vedere che la funzione può essere passata come un comportamento. Simpatico!!! – Lucas

2

Mai usato angular.forEach() ma sembra piuttosto semplice.

var hello = { 
     message: 'Ok' 
    }; 

    angular.forEach([' I', ' said', ' hello'], function (value) { 
     this.message += value; 
    }, hello); 

    console.log(hello.message); 

1/E registrerà 'Ok ho detto ciao' in modo sostanzialmente che param 'contesto' vi permetterà di aggiornare qualsiasi oggetto che si riferiscono. Il caso d'uso è davvero ampio ...

2/Penso che abbia qualcosa a che fare con il contesto di esecuzione alias. ambiente lessicale quindi significa che this deve essere correlato a come angular.forEach è implementato. Basta controllare il codice sorgente di angularjs.

+0

Grazie per l'attenzione. – Lucas

+0

Cheers uomo. Buona domanda a proposito. –

Problemi correlati