удается получить следующий пройти JSLint/jshintСтрогого Нарушение использование этого ключевого слова и выявление шаблон модуля
/*jshint strict: true */
var myModule = (function() {
"use strict";
var privVar = true,
pubVar = false;
function privFn() {
return this.test; // -> Strict violation.
}
function pubFn() {
this.test = 'public'; // -> Strict violation.
privFn.call(this); // -> Strict violation.
}
return {
pubVar: pubVar,
pubFn: pubFn
};
}());
myModule.pubFn();
Я понимаю, что это было вызвано использованием this
в объявлении функции, но я читал что-то Крокфорд написал и он сказал, что нарушение предназначено для предотвращения глобального переменного загрязнения - но единственной глобальной переменной здесь является тот, который я явно определяю ... myModule
. Все остальное хранится в непосредственной функциональной области, и я должен иметь возможность использовать this
для ссылки на модуль.
Любые идеи, как я могу получить этот шаблон для прохождения?
Update: если я использую выражение функции вместо декларации, это похоже на работу, т.е.
var pubFn = function() { ...
Я не поклонник этого формата, хотя, предпочитают иметь имя функции и именованные параметры ближе, и декларация выглядит/чувствует себя чище. Я, честно говоря, не понимаю, почему это бросает нарушение - нет причин для этого в этом шаблоне.
Звучит как один из тех случаев, когда вы можете просто игнорировать жалобы jslint. Как в стороне, как работает 'pubVar' при доступе как' myModule.pubVar'? Это действительно не дает код за пределами модели доступа к переменной в модуле? Я бы подумал, что если вы хотите получить/установить текущее значение переменной модуля, вам понадобятся функции getter и setter. – nnnnnn
Ты прав, я подумал, что это выглядит немного смешно. Если вы попробовали 'myModule.pubVar = true', вы просто переписывали бы свойство объекта. Внутренний 'pubVar' останется как' false' –
Re ваше обновление: я предпочитаю 'var foo = function() {}' to 'function foo() {}', потому что это помогает избежать проблем с хостингом. Кроме того, мне нравится, что он делает * функции, которые больше похожи на другие вары, поскольку в JS нет никакой разницы между функцией или любым другим значением - они являются первоклассными. Личные предпочтения, я знаю, но я думал, что выброшу некоторые мысли. – JAAulde