Как зафиксировать jslint ошибку, 'Не делают функции в цикле'.?

Я работаю над тем, чтобы заставлять весь наш код JS пройти через jslint, иногда с большой тонкой настройкой с опциями получить передачу унаследованного кода на данный момент на с намерением зафиксировать его правильно позже.

Существует одна вещь, что jslint жалуется на это, у меня нет workround для. Это при использовании конструкций как это, мы добираемся, ошибка 'Не делают функции в цикле'.

for (prop in newObject) {
    // Check if we're overwriting an existing function
    if (typeof newObject[prop] === "function" && typeof _super[prop] === "function" &&
        fnTest.test(newObject[prop])) {
        prototype[prop] = (function(name, func) {
            return function() {
                var result, old_super;

                old_super = this._super;
                this._super = _super[name];
                result = func.apply(this, arguments);
                this._super = old_super;

                return result;
            };
        })(prop, newObject[prop]);
    }
}

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

Но у нас также есть другие экземпляры функций, созданных в цикле.

Единственное обходное решение до сих пор должно исключить эти файлы JS из jslint, но мы хотели бы использовать jslint для проверки кода и синтаксиса, проверяющего как часть нашей непрерывной интеграции и рабочего процесса сборки.

Существует ли лучший способ реализовать функциональность как это или существует ли способ настроить код как это через jslint?

60
задан Rishabh 16 November 2016 в 13:23
поделиться

3 ответа

У Дугласа Крокфорда есть новый идиоматический способ достижения вышеизложенного - его старая техника заключалась в использовании внутренней функции для связывания переменных, но в новой технике используется создатель функций. См. слайд 74 в слайдах к его докладу «Function the Ultimate» . [Этот слайдшер больше не существует]

Для ленивых, вот код:

function make_handler(div_id) {
    return function () {
        alert(div_id);
    };
}
for (i ...) {
    div_id = divs[i].id;
    divs[i].onclick = make_handler(div_id);
}
65
ответ дан 24 November 2019 в 17:47
поделиться

Просто переместите свой:

(function (name, func) {...}) ()

из цикла и назначьте его в переменную, например:

var makeFn = function (name, func) {...};

Затем в цикле:

prototype [prop] = makeFn (...)

3
ответ дан 24 November 2019 в 17:47
поделиться

JSLint - это всего лишь руководство, вам не всегда нужно придерживаться правил. Дело в том, что вы не создаете функции в цикле в том смысле, на который он ссылается. Вы создаете свои классы в своем приложении только один раз, а не снова и снова.

7
ответ дан 24 November 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: