2015-01-17 4 views
1

나는 다음 (간체) Batman.js 파일을 가지고 :해결 가능 엄격한 위반 (배트맨은 고담을 절약 할)

(function(){ 
    "use strict"; 

    window.Batman = function(){ 
    // Global references 
    this.version = "1.0.1"; 
    }; 

    Batman.prototype.saveGotham = function(params) { 
    var _ = this; // Works fine 
    destroyGotham.call(_, params); 
    }; 

    // Private 
    function destroyGotham(params){ 
    var _ = this; // <!-- "possible strict violation" 
    } 

}()); 

JSHint가 표시된 라인에서 possible strict violation에 대해 불평. "use strict"을 삭제하지 않고 어떻게이 문제를 해결할 수 있습니까?

P.S : 번거로운 var _ = thisBatman 인스턴스를 참조하고 싶습니다.

답변

2

엄격 모드의 함수에 this으로 전달 된 값은 강제로 개체가되지 않습니다.
일반 함수의 경우 this은 항상 객체이며 정의되지 않거나 null 인 경우 this과 함께 호출되는 경우 전역 객체입니다. 즉, this은 기본적으로 비 엄격 모드에서 window입니다.

자동화 된 복싱은 성능 비용뿐만 아니라 브라우저에서 전역 개체를 노출시키는 것은 보안상의 위험이 있습니다. 전역 개체는 JavaScript 환경이 "안전해야하는"기능에 대한 액세스를 제공하기 때문에 보안 위험이 있습니다.
엄격 모드 기능의 경우 지정된 this은 객체에 박스로 표시되지 않으며 지정되지 않은 경우 this은 기본적으로 정의되지 않습니다.

그냥 정의되어 있지 않다고 this으로 이어질 것입니다 대부분의 경우 변수

var _ = this; 

로 설정, 그 방법을 this 사용하는 것을 의미한다, 왜 jshint 같이, 그것은 "가능" 위반의 말되는 call으로 전화하지 않고이 값을 제공하면됩니다.

jshint를 무시하십시오. 현재하고있는 일이 정상입니다.

+0

그리고 어떻게 수정합니까? – FloatingRock

+0

'this'가 정의 된 방식으로 함수를 호출 할 때 jshint를 무시합니다. – adeneo

+0

감사합니다. 불만 사항 위의 행에'/ * jshint validthis : true * /'를 추가 할 수 있다는 것을 알았습니다 'var _ = this;'는 에러를 억제합니다. – FloatingRock