2012-04-25 33 views
55

Jaki byłby właściwy sposób rozwiązania błędu jslint w tym przypadku? Dodaję funkcję getter do obiektu, który używa tego. Nie wiem, jak to zrobić bez tworzenia funkcji wewnątrz pętli.Nie twórz funkcji wewnątrz pętli

for (var i = 0; i<processorList.length; ++i) { 
    result[i] = { 
     processor_: timestampsToDateTime(processorList[i]), 
     name_: processorList[i].processorName, 
     getLabel: function() { // TODO solve function in loop. 
      return this.name_; 
     } 
    }; 
} 
+0

Dlaczego nie wyciszyć Błąd jslint w ogóle? [Tutaj jest] (http://stackoverflow.com/a/40060701/307454) jak. – lifebalance

+1

Ponieważ błąd istnieje z jakiegoś powodu. Nie wydaje mi się, żeby napisanie takiego kodu było bardzo przyjemne, gdy wiele z tych samych funkcji zostanie utworzonych bez prawdziwego powodu. –

+1

_Sometimes_ jslint niekoniecznie jest ostatecznym przewodnikiem właściwego stylu kodowania ... – lifebalance

Odpowiedz

93

Przenieś funkcję poza pętlą:

function dummy() { 
    return this.name_; 
} 
// Or: var dummy = function() {return this.name;}; 
for (var i = 0; i<processorList.length; ++i) { 
    result[i] = { 
     processor_: timestampsToDateTime(processorList[i]), 
     name_: processorList[i].processorName, 
     getLabel: dummy 
    }; 
} 

... Albo po prostu zignorować ten komunikat za pomocą loopfunc option na początku pliku:

/*jshint loopfunc:true */ 
+0

Ah Nie sądziłem, że "ten" wskaźnik nadal będzie działał w ten sposób. Czy nie wskazuje na funkcję fikcyjną zamiast obiektu w wyniku [i]? Innymi słowy czy nazwa_ jest nadal poprawnie znaleziona? –

+2

@ 0x80 'this' wskazuje na kontekst funkcji, czyli" wyniki [i] "w tym przypadku. http://jsfiddle.net/W5vfw/ –

+2

Wspaniale! Dzięki za wyjaśnienie tego wyraźnie. To była jedna z tych rzeczy, których nigdy nie czułem się pewnie w JavaScript. –

Powiązane problemy