2012-08-14 1 views
1
for (element = 0; element < this.tag_array.length; element++) { 
    document.getElementById(this.tag_array[element]).addEventListener(
    "click", function(){ /* constructor function here */ }); // jshint.com error #1 
} 

이 코드는 jshint.com b.c.에서 오류를 발생시킵니다. 그것은 루프에서 선언 된 함수를보고 싶지 않습니다.Jshint | 기본 설정 전달 | 함수 선언 및 'this'

그러나 단순한 함수 참조를 전달하면 다시 jshint를 제거하지 않고 'this'를 추출 할 수 없습니다.

for (element = 0; element < this.tag_array.length; element++) { 
    document.getElementById(this.tag_array[element]).addEventListener(
    "click", vFlipBP); 
} 

이제 vFlipBP에서 'this'를 사용하면 b.c. 오류가 발생합니다. 'this'가 생성자 함수와 함께 사용되기를 기대합니다.

function vFlipBP(){ var foo = this ; } // jshint error #2 

이 때문에이 특정 기능에서 jsthint.com을 만족스럽게 만드는 것은 불가능합니다.

jshint.com 옵션을 끄지 마십시오.

jshint.com 기본 설정을 전달하는 코드를 작성할 수 있습니까?

나는 왜 이러한 경고/오류가 발생하는지에 대한 이유를 이해하려고 노력하고 있습니다.

나는 오류에 대한 걱정에 매달려 있지 않다. (선택 사항이다. 나는 그것을 꺼놓을 수있다.) ... 나는 기본값을 통과 할 수 있는지 알고 싶다 ... 각도가있다. 놓쳤다.

답변

1

를 지정하기 위해 @this를 사용하여 수행 할 수 있습니다, 그것은 보인다 JSHint이 마음을하지 않습니다 ...

var element; 
for (element = 0; element < 10; element++) { 
    document.getElementById(this.tag_array[element]).addEventListener(
    "click", make_func()); 
} 

function make_func() { 
    "use strict"; 
    return function(){ var foo = this; alert(foo); }; 
} 

또한 ... 당신은 함수 선언 구문을 사용하지 않는 경우 받아들이는 것 같다

var element; 
var the_func = function(){ 
    "use strict"; 
    var foo = this; 
    alert(foo); 
}; 


for (element = 0; element < 10; element++) { 
    document.getElementById(this.tag_array[element]).addEventListener(
    "click", the_func); 
} 
+0

@HiroProtagonist : http://jshint.com에서 테스트했습니다. 오류가 없습니다. –

+0

@HiroProtagonist :이 기술을 사용하여 코드에 오류가 있습니까? –

+0

당신은 이것과 함께 생성자 함수를 사용하지 않고 있습니다. 그러나 오류는 발생하지 않습니다. –

1

this을 콜백의 컨텍스트로 사용하고 싶지만 jshint는 생성자가 아닌 함수에서 이것을 사용하는 것에 대해 불평합니다.

그래서 이것이 당신이

했다 코드입니다 가정
function showId() { 
    alert(this.id); // jshint warning here 
} 
for (element = 0; element < this.tag_array.length; element++) { 
    document.getElementById(this.tag_array[element]).addEventListener(
    "click", showId); 
} 
당신이 this를 사용하지 않도록 함수를 다시 작성해야 할 것

, 여기

function createHandler(obj) { 
    return function(e) { 
     alert(obj.id); 
    } 
} 

for (element = 0; element < this.tag_array.length; element++) { 
    var nodeId = this.tag_array[element]; 
    var node = document.getElementById(nodeId); 
    node.addEventListener("click", createHandler(node)); 
} 

당신이 할 수없는 가능한 방법을이다 이 특정 기능을 사용하는 것이 안전한지 jshint에게 알려주십시오 this? validthis이 옵션을 사용 하시겠습니까? 구글 폐쇄 컴파일러에서 당신이 몇 가지 동일한 기능을 걱정하지 않는 것 때문에 당신이 this은 그 함수에있을 것입니다 알고 (및 경고 피) https://developers.google.com/closure/compiler/docs/js-for-compiler

+0

그러면 외부 함수가 함수 생성자가되어야합니다. –

+0

@HiroProtagonist "함수 생성자가 필요합니다"라는 것이 확실하지 않은 경우 루프 내의 함수에 실제 코드를 표시하십시오 –

+0

'this'를 사용하고 기본 설정을 전달하십시오 on jshint .... 이것은 다음과 같은 함수 생성자에서만 사용되어야합니다 .....var function_constructor = function() {// 여기에 코드}; –