2013-07-21 24 views
7

JSLint daje mi błąd "ścisłego naruszenia", chociaż używam kontekstu "tego" wewnątrz funkcji, która ukrywa go przed zasięgiem globalnym.Dlaczego JSLint podaje ścisły błąd naruszenia tej funkcji?

function test() { 
    "use strict"; 
    this.a = "b"; 
} 

Dla potrzeb zapisu używam wbudowanego parsera JSLint w Webstorm.

+0

Kiedy wkleję ten kod do JSLint.com, wszystkie domyślne opcje, nie otrzymam błędu. Jaki był kontekst błędu, gdy zmiana nazwy funkcji usunęła go? – ruffin

+0

Używam Webstorm, który może ma przestarzałą wersję JSLint –

+0

Czy masz szansę na dwie funkcje o nazwie (test) (w twoim kodzie Live)? Wtedy zmiana sprawy sprawi, że będą inni. – ruffin

Odpowiedz

10

Dzieje się tak, ponieważ JSLint nie rozpoznaje twojej funkcji jako konstruktora. Zgodnie z konwencją musisz używać wielkich liter.

function Test() { 
    "use strict"; 
    this.a = "b"; 
} 
+4

Możesz spojrzeć na http://jshint.com. Oferuje większą kontrolę, zamiast blokować opcje kontrolowane przez opinię Crockforda, a nie specyfikację. Problem, który napotkasz, występuje również w przypadku innych niż konstruktorów, jeśli deklarujesz funkcje, które zamierzasz zastosować jako metody. (Na przykład, jeśli po twoim 'function test() {...}' miałeś 'obj.test = test;' i skończyłeś z funkcją o właściwej nazwie we właściwości 'test', ale bez użycia nazwane wyrażenie funkcji ze względu na problemy z IE.) –