2014-02-06 3 views
9

node.js에 함수를 만들려고합니다. 다음은 관련 코드이며, 함수 호출시 오류가 발생합니다.오류 : 생성자를 호출 할 때 새 접두사가 없습니다.

+0

'ReplacePlaceholders()'가'exports.sendMailMsg'와 같은 범위에 없거나'exports'가 객체가 아닌 한, 여기에 보여준 코드에는 아무런 문제가 없습니다. 어떤 구체적인 오류가 있습니까? – jfriend00

답변

13

Node.js를에서, 함수 이름은 낙타 맡았다하고, 소문자로 시작해야한다. 대문자로 함수를 시작하면 JSHint는 메소드가 아니라 생성자로 간주합니다.

실제로 이것은 JSHint에 의해 생성되는 오류이지만 코드는 올바르게 실행됩니다. 이 오류를 발생시키는 The option in JSHint, newcap은 실제로 감가 상각되며이를 사용하지 않도록 설정하는 것이 좋습니다.

이 옵션을 JSHint에 짝수 이유에 관련 정보 :

이 옵션은 생성자 함수의 이름을 투자 할 필요합니다. new 연산자와 함께 사용하려는 함수를 대문자로 사용하는 것은 프로그래머가 생성자 함수를 다른 함수 유형과 시각적으로 구별하여이를 사용할 때 실수를 찾아내는 데 도움이되는 규칙입니다.

아무 브라우저 나 환경에서도 코드가 깨지지는 않지만 코드를 읽으면 알아 내기가 더 어려울 것입니다. 기능이 new과 함께 사용되었거나 사용되지 않아야하는 경우입니다. new와 함께 사용하려는 함수가 new와 함께 사용될 때 this은 새 객체 대신 전역 객체를 가리키기 때문에 중요합니다.

+0

감사합니다 frnd ... 나는이 간단한 일을 위해 나의 반나절을 낭비했다. ..! – Anup

+5

이것은 단순히 사실이 아닙니다. Javascript는 대소 문자를 구별합니다. 그러나 대문자로 시작하는 경우 Javascript는 함수를 다르게 처리하지 않습니다. 대문자로 시작하기 때문에 할당 된 특별한 동작이 없습니다. 대/소문자를 사용하는 스타일 규칙이 있지만 언어를 사용하는 방법에 대한 순수한 스타일 의견입니다. – jfriend00

+0

node.js 및 관련 linting은 오류를 발생시키고 코드를 올바르게 처리하지 않습니다. 그것이 주로 스타일 의견 인 것은 사실이지만, node.js는 당신이 그들의 스타일에 따르기를 기대합니다. 노드 JavaScript가 일반 JavaScript가 아닌 node.js라는 것이 더 명확하게 명시되어야합니다. – Claies

0

왜 그런지는 모르겠지만 그 오류는 new ReplacePlaceholders(); 일을하는 것이 좋습니다. 비록, 당신은 다음과 같은 것을 고려할 수 있습니다 :

function ReplacePlaceholders(templateName, receiverEmail, dataPlaceholders) { 
    return 'success'; 
} 

exports.sendMailMsg = ReplacePlaceholders; 
3

언급 한 오류 메시지는 런타임 오류가 아닌 JSHint 오류 메시지입니다.

jshint expects the new 'prefix' for functions

JSHint 객체 정의로 대문자로 시작하는 기능을 기대 : 여기에 대한 논의가있다. 오류를 무시하거나 JSHint에서 비활성화하거나 함수의 이름을 변경하여 소문자로 시작하도록 할 수 있습니다.

관련 문제