Kodėl JSHINT skundžiasi, kad tai yra sunkus pažeidimas?

Manau, kad tai gali būti dvigubas griežtas pažeidimas naudojant šį raktinį žodį ir šablono modulio atskleidimas

Turiu šį kodą:

 function gotoPage(s){ if(s<=this.d this.page((s-1)*this.p.size);} } function pageChange(event, sorter) { var dd = event.currentTarget; gotoPage.call(sorter, dd[dd.selectedIndex].value); } 

Ir JSHINT (JSLINT) skundžiasi. Jame teigiama: „Griežtas pažeidimas“. pasirinktai eilutei:

Aš naudoju Function.call() ir tada kreipkitės į instanciją, kažkaip netinkamą?

Ar tai blogas stilius?

95
07 окт. Cheeso 07 spalis. 2011-10-07 17:36 '11, 17:36, 2011-10-07 17:36
@ 4 atsakymai

JSHint sako: „Galimas rimtas pažeidimas“, nes jūs naudojate this viduje, kiek įmanoma, o ne metodas.

Ne griežtu režimu skambutis į gotoPage(5) susieti jį su visuotiniu objektu (naršyklės window ). Griežtuoju režimu this bus undefined , ir turėsite problemų.

Manoma, kad norite šią funkciją skambinti, pvz., Susijusiu kontekstu. gotoPage.bind(myObj)(5) arba gotoPage.call(myObj, 5) . Jei taip, galite ignoruoti JSHint, nes nesukelsite jokių klaidų. Tačiau, tai jums pasakys, kad jūsų kodas yra neaiškus, kas jį skaito, nes this , kas aiškiai naudojama ne kaip metodas, yra gana paini. Būtų geriau perkelti objektą kaip parametrą:

 function gotoPage(sorter, s) { if (s <= sorter.d  s > 0) { sorter.g = s; sorter.page((s - 1) * sorter.p.size); } } function pageChange(event, sorter) { var dd = event.currentTarget; gotoPage(sorter, dd[dd.selectedIndex].value); } 
121
07 окт. Domeno atsakymas, spalis 07 2011-10-07 17:45 '11, 17:45, 2011-10-07 17:45

Turėjau šį pranešimą už funkciją, kuri nepradėjo didžiosios raidės.

border=0
 "use strict"; // ---> strict violation function something() { this.test = ""; } // ---> just fine (note the capital S in Something) function Something() { this.test = ""; } 
91
25 нояб. Atsakymą duoda „ Amenthes “ lapkričio 25 d 2014-11-25 04:28 '14, 4:28 2014-11-25 04:28

Jei deklaruojate funkciją kaip kintamąjį, o ne naudodami standartinę funkcijų deklaraciją, jshint to nepažymės kaip griežtą pažeidimą. Taigi galite atlikti šiuos veiksmus:

 var gotoPage = function (s){ if(s<=this.d this.page((s-1)*this.p.size);} }; var pageChange = function (event, sorter) { var dd = event.currentTarget; gotoPage.call(sorter, dd[dd.selectedIndex].value); }; 
9
27 апр. atsakymas pateikiamas asulaimanas 27 d. 2015-04-27 20:25 '15, 8:25 pm 2015-04-27 20:25

Jei bandote įgyvendinti metodą, galite priskirti prototipą:

 ExampleClassName.protytpe.gotoPage = function gotoPage(s){ // code using this }; 

„JSHint“ nebus įspėjama, kai bus priskirta funkcija.

0
14 авг. atsakymą pateikė Flimm 14 rug. 2015-08-14 19:16 '15, 19:16, 2015-08-14 19:16

Kiti klausimai apie „ etiketes „ arba „ Užduoti klausimą“