Niyə JSHINT bu ciddi pozuntu olduğunu şikayət edir?

Hesab edirəm ki, bu kopya ola bilər. Bu sözün istifadəsi və şablon modulunun açıqlanması ilə ciddi pozuntu

Bu kodu var:

 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); } 

Və JSHINT (JSLINT) şikayət edir. "Qətilik pozulması" deyir. Seçilmiş xətt üçün:

Function.call() istifadə edirəm, sonra nümunəyə birbaşa uyğunsuzluğa baxıram?

Bu pis bir stil mi?

95
07 окт. Cheeso 07 oktyabr dəsti. 2011-10-07 17:36 '11 'də 17:36' də 2011-10-07 17:36
@ 4 cavab

JSHint "Mümkün şiddətli pozuntu" deyir, çünki this içəridən mümkün qədər mümkün deyil, bir metoddan istifadə edirsiniz.

Qeyri-ciddi rejimdə, gotoPage(5) üçün bir çağırış this qlobal obyektə (brauzerdə olan window gotoPage(5) bağlayacaq. Möhkəm rejimdə this undefined və probleminiz olacaq.

Sözsüz ki, məsələn, this kontekstdən istifadə edərək, bu funksiyanı zəng etmək istəyirlər. gotoPage.bind(myObj)(5) və ya gotoPage.call(myObj, 5) . Əgər belədirsə, JSHint'i görməyəcəksiniz, çünki hər hansı bir səhv yaratmırsınız. Ancaq bu sizin kodunuzun kimin oxuduğunun dəqiq olmadığını söyləyir, çünki this bir şeyi açıq şəkildə istifadə etməyən bir şeyin içini istifadə etmək çox kafa karıştırıcıdır. Sadəcə obyektin parametr kimi keçməsi daha yaxşı olardı:

 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 окт. Domenik cavab Oct 07 2011-10-07 17:45 '11 'də 17:45' də 2011-10-07 17:45

Bu mesajı böyük bir məktubla başlamayan bir funksiyaya sahib oldum.

border=0
 "use strict"; // ---> strict violation function something() { this.test = ""; } // ---> just fine (note the capital S in Something) function Something() { this.test = ""; } 
91
25 нояб. Cavab 25 noyabr tarixində verildi 2014-11-25 04:28 '14 'da 4:28' də 2014-11-25 04:28

Bir funksiyanı bir standart funksiya bəyannaməsi yerinə deyil, dəyişən kimi bəyan edirsinizsə, jshint bunu ciddi pozuntu kimi qeyd etməyəcəkdir. Beləliklə, aşağıdakıları edə bilərsiniz:

 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 апр. cavab asulaiman 27 apr verilir . 2015-04-27 20:25 '15 at 8:25 pm 2015-04-27 20:25

Bir metodu həyata keçirmək üçün çalışırıqsa, bunun əvəzinə prototip təyin edə bilərsiniz:

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

Bir funksiya təyin edildikdə JSHint xəbərdar etməyəcək.

0
14 авг. cavab Flimm 14 aug tərəfindən verilir . 2015-08-14 19:16 '15 'da 19:16' de, 2015-08-14 19:16

yazıları ilə bağlı digər suallar və ya