Jshint ожидает новый префикс для функций
CSiginIn
, CSignUp
, CTryIt
, CBlocks
- все функции, объявленные как таковые
function CSignIn(){//stuff here}
но JSHint говорит, что мне не хватает "нового" префикса. Что я могу сделать, чтобы исправить это?
Это просто функции внутри шаблона модуля. Кроме того, он просит меня удалить точки с запятой, которые я разместил в конце функции, которую я сделал.
var Control = ( function ()
{
/**
*Publik
*/
var publik = function ( page )
{
// page 1 initialization
if( page == 1 )
{
CSignIn();
CSignUp();
CTryIt();
CBlocks();
}
Пример функции...
function CTryIt()
{
// pull elements
var tryit_button = document.getElementById( 'tryit_button' );
// initialize access to Model
tryit_button.addEventListener( "click", function( )
{
new AjaxRequest().invoke( 'ajax_type=ControlTryIt',
function( server_response_text )
{
new AjaxResponse( server_response_text, 'page_change' );
} );
}, false );
}
Ответы
Ответ 1
Если параметр newcap
включен, JSHint ожидает, что функции, начинающиеся с заглавной буквы, будут конструкторами и поэтому будут вызваны с ключевым словом new
.
Решение: отключите эту опцию или переименуйте свои функции.
В документации :
Эта опция требует, чтобы вы использовали имена функций конструктора. Заглавные функции, предназначенные для использования с оператором new
, - это просто соглашение, которое помогает программистам визуально различать конструкторские функции от других типов функций, чтобы помочь выявить ошибки при использовании this
.
Не делать этого не нарушит ваш код в каких-либо браузерах или средах, но будет немного сложнее вычислить код - если функция должна была использоваться с или без new
. И это важно, потому что, когда функция, предназначенная для использования с new
, используется без нее, this
будет указывать на глобальный объект вместо нового объекта.
function MyConstructor() {
console.log(this);
}
new MyConstructor(); // -> [MyConstructor]
MyConstructor(); // -> [DOMWindow]
Для более глубокого понимания того, как работает this
, прочитайте Понимание функции JavaScript Invocation и "this" от Yehuda Katz.
Ответ 2
Феликс Клинг уже дал вам правильный ответ. Для полноты я бы заметил, что newcap
по умолчанию - true
(документация не указала его, но вы можете прочитать его в исходный код). Это означает, что удаление параметра newcap: true
в параметрах JSHint не приведет к отключению предупреждения: вместо этого вам нужно явно установить newcap: false
.