programing tip

JSHint "엄격한 위반 가능성이 있습니다."

itbloger 2020. 10. 24. 09:41
반응형

JSHint "엄격한 위반 가능성이 있습니다." `bind`를 사용할 때


이 간단한 코드를 고려하십시오.

"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        g.bind( this )();
    }
};

function g() {
    console.log( this.prop );
}

이 코드의 유효성을 검사하려고하면 jshint Possible strict violation.에서 console.log( this.prop );. 이는 this함수의 엄격 모드에서 정의되지 않았기 때문 입니다.

하지만이 함수를 호출하기 전에 바인딩하고 있으므로 this올바른 개체입니다.

이 "디자인 패턴"을 사용하여 주요 개체를 어지럽히 지 않도록합니다. 매개 변수에 속성을 전달하면 함수도 복잡해 지므로이를 거부합니다. 게다가 이것이 바로 그 이유 bind입니다.

JSHint가이 작업을 수행 할 수있는 방법이 있습니까?


코드를 실행하지 않고이 경우를 감지하는 것은 매우 어렵습니다. 옵션 validthis사용 하여이 경고를 억제 할 수 있습니다 .

"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        g.bind( this )();
    }
};

function g() {
    /*jshint validthis:true */
    console.log( this.prop );
}

jshint 주석은 함수 범위라는 점에 유의해야합니다. 따라서 주석은 g다음 줄뿐만 아니라 함수 와 내부 함수에 대해 작동합니다 .


this모두 함께 사용하지 않도록 코드를 다음과 같이 수정하는 경우에도 동일한 효과를 얻을 수 있습니다 .

"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        g.bind( null, this )();
    }
};

function g(self) {
    console.log( self.prop );
}

다음은 jshint에 대한 패턴이나 특정 마크 업을 변경할 필요가없는 더 간단한 솔루션입니다.

"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        G.bind( this )();
    }
};

function G() {
    console.log( this.prop );
}

jshint는 대문자로 시작하는 함수가 인스턴스화되고 항상 this사용할 수 있는 클래스라는 규칙을 따르고 있다고 가정합니다 .


시험:

"use strict";

var obj = {
    f: function() {
        this.prop = 'value';
        g.bind( this )();
    }
};

var g = function() {
    console.log( this.prop );
}

이것은 당신이 말한 것과는 다른 "디자인 패턴"이며, 동일한 것을 달성하지만 문제를 완전히 피합니다.

"use strict";

function obj() {
    this.prop = '';
}

obj.prototype.f = function obj_f() {
    this.prop = 'value';
    this.g();
};

obj.prototype.g = function obj_g() {
    console.log( this.prop );
};

다음과 같이 호출합니다.

var myO = new obj();
myO.f();

참고URL : https://stackoverflow.com/questions/12057427/jshint-possible-strict-violation-when-using-bind

반응형