2014-02-06 3 views
9

Я пытаюсь создать функцию в node.js. Ниже приведен соответствующий код, он дает мне ошибку, когда я вызываю функцию.Ошибка: отсутствует новый префикс при вызове конструктора

function ReplacePlaceholders() { 
      return 'success'; 
      }  



    exports.sendMailMsg = function (templateName, receiverEmail, dataPlaceholders) { 

     ReplacePlaceholders(); 
} 
+0

В коде, который вы покажете здесь, нет ничего плохого, если 'ReplacePlaceholders()' не находится в той же области, что и 'export.sendMailMsg', или если' export' не является объектом. Какая конкретная ошибка вы получаете? – jfriend00

ответ

13

В node.js, имена функций верблюд обсаженных, и должен начинаться со строчной характера. Запуск функции с символом верхнего регистра говорит JSHint рассматривать функцию как конструктор, а не метод.

Это фактически ошибка, генерируемая JSHint, но код будет работать правильно. The option in JSHint, newcap, что вызывает эту ошибку, фактически обесценивается, и рекомендуется отключить ее.

Соответствующая информация, почему этот вариант даже в JSHint:

Эта опция требует, чтобы капитализировать имена функций конструктора. Капитализирующие функции, предназначенные для использования с оператором new, - это просто соглашение, которое помогает программистам визуально различать функции конструктора от других типов функций, чтобы помочь выявить ошибки при использовании этого.

Не делать этого не нарушит ваш код в каких-либо браузерах или средах, но будет немного сложнее выяснить, прочитав код, если функция должна была использоваться с new или без нее. И это важно, потому что, когда функция, предназначенная для использования с новым, используется без нее, this будет указывать на глобальный объект вместо нового объекта.

+0

Спасибо, frnd ... Я потратил половину дня на эту простую вещь ...! – Anup

+5

Это просто НЕ верно. Javascript чувствителен к регистру, но Javascript НЕ обрабатывает какую-либо функцию иначе, если она начинается с заглавной буквы или нет - нет специального поведения, назначенного только потому, что что-то начинается с заглавной буквы. Существуют соглашения стиля, которые используют капитализацию определенным образом, но это чисто стильные мнения о том, как использовать язык. – jfriend00

+0

node.js и связанная с этим линтировка будет вызывать ошибки и не обрабатывать код правильно. Хотя это правда, что это в основном мнение стиля, node.js ожидает, что вы будете соответствовать их стилю. Возможно, я должен сказать более четко: node.js, а не общий JavaScript – 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 или переименовать свою функцию, чтобы она начиналась с строчной буквы.

Смежные вопросы