이 키워드를 사용하고 모듈 패턴을 드러내는 Strict Violation 의 중복이라고 생각합니다.
이 코드가 있습니다.
function gotoPage(s){
if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);}
}
function pageChange(event, sorter) {
var dd = event.currentTarget;
gotoPage.call(sorter, dd[dd.selectedIndex].value);
}
그리고 JSHINT (JSLINT)가 불평하고 있습니다. “엄격한 위반”이라고되어 있습니다. 강조 표시된 라인 :
Function.call()
인스턴스를 사용한 다음 참조하는 것이 부적절합니까?
이것은 나쁜 스타일로 간주됩니까?
답변
JSHint는 “엄격한 위반 가능성”이라고 말합니다. 왜냐하면 여러분이 this
알 수있는 한 메서드가 아닌 것을 내부에서 사용하고 있기 때문 입니다.
엄격하지 않은 모드에서 호출 gotoPage(5)
은 브라우저에서 this
전역 개체에 바인딩 됩니다 window
. 엄격 모드에서, this
것 undefined
, 당신은 곤경에 얻을 것입니다.
아마도 바운드 this
컨텍스트 (예 : gotoPage.bind(myObj)(5)
또는)를 사용 하여이 함수를 호출하는 것을 의미합니다 gotoPage.call(myObj, 5)
. 그렇다면 오류를 생성하지 않으므로 JSHint를 무시할 수 있습니다. 그러나 this
분명히 메소드가 아닌 내부를 사용 하는 것은 매우 혼란 스럽기 때문에 코드를 읽는 사람에게는 코드가 명확하지 않다는 것을 알려줍니다 . 단순히 개체를 매개 변수로 전달하는 것이 좋습니다.
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);
}
답변
대문자로 시작하지 않는 함수에 대해이 메시지를 받았습니다.
"use strict";
// ---> strict violation
function something() {
this.test = "";
}
// ---> just fine (note the capital S in Something)
function Something() {
this.test = "";
}
답변
표준 함수 선언을 사용하는 대신 함수를 변수로 선언하면 jshint는이를 엄격한 위반으로 표시하지 않습니다. 따라서 다음을 수행 할 수 있습니다.
var gotoPage = function (s){
if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);}
};
var pageChange = function (event, sorter) {
var dd = event.currentTarget;
gotoPage.call(sorter, dd[dd.selectedIndex].value);
};
답변
메서드를 구현하려는 경우 대신 프로토 타입에 할당 할 수 있습니다.
ExampleClassName.protytpe.gotoPage = function gotoPage(s){
// code using this
};
JSHint는 함수가 할당 될 때 경고하지 않습니다.