2014-12-09 2 views
0

"noop"함수를 사용하고 싶습니다. (아무 것도하지 않는 함수입니다.jshint 및 Function() 가져 오기 : 생성자를 호출 할 때 'new'접두어가 누락되었습니다.

var noop = Function(); 

을하지만 파일을 통해 jshint을 실행할 때, 필자는 다음과 같은 오류지고 : 그래서 내가 쓰고 내가 Function.prototype에 대한 Function()을 변경할 때

Missing 'new' prefix when invoking a constructor. 

이 오류가 멀리 간다,하지만 내가 선호 첫 번째.

왜이 오류가 발생합니까? 이 힌트를 어떻게 피할 수 있습니까?

미리 감사드립니다.

+0

첫 번째 문자가 대문자 인 모든 함수는 호출 될 때 새 인스턴스로 간주됩니다. 당신은 var noop = function() {}을 사용하여 동일한 결과를 얻을 수 있습니다. 또한 Function()을 직접 사용하는 것은 나쁜 습관으로 간주됩니다. –

+0

왜 나쁜 습관입니까? Function()에 의해 생성 된 – lante

+1

함수는 호출 될 때 구문 분석됩니다. 이것은 나머지 코드와 구문 분석되는 function() {} 표현식을 사용하는 것보다 효율적이지 않습니다. Function()로 작성된 함수는 항상 전역 범위에서 작성됩니다. 나를 틀리게하지 마라, 그것이 장소 다. eval 대신 Function()을 사용하는 것이 좋습니다. 그것은 내가 그것을 사용할 때 한 곳이다. 대부분의 경우 명명 된 함수가 사용되었습니다. –

답변

2

귀하의 표현은 실제로

var noop = new Function(); 

또는

과 동일
var noop = new Function; 

당신이 Function() === Function()

짧고 안전한 대안 I을 실행하여 새로운 개체를 매번 작성하는 것을 볼 수있다 생산에 사용 된 톱은 다음과 같습니다 :

var noop = Number; 

jshint가 멋지다. 장점은 사용될 때마다 새로운 객체를 생성하지 않는다는 것입니다.

업데이트 : 호출 생성자가 위험 할 수있는 새로운 않고 (첫 글자는 관례 생성자를 의미 대문자) 때문에 그 기능에 this가 ES3에서 window 및 변경에 있기 때문에 그냥 완성도를 위해서 , jshint는 불평 this은 전역 개체를 수정합니다.