Как вызов функции передать в качестве параметра JS и как не вызывать определенные функции на странице

206
03 ноября 2017, 12:19

    function checkPage(obj) { 
        console.log("start checkPage"); 
        if (typeof obj === 'object'){ 
            for (var key in obj) { 
                if ($('body').hasClass(key)){ 
                    if (obj[key].isArray){ 
                        for (var i=0;i<obj[key].length;i++){ 
                            obj[key][i]; 
                        } 
                    }else { 
                        obj[key]; 
                    } 
                } 
            } 
        } 
    } 
    function indexFunc() { 
        console.log('index') 
    } 
    function newsFunc() { 
        console.log('news') 
    } 
    checkPage({ 
            index: [indexFunc()], 
            news: [newsFunc()], 
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<body class='index'></body>

Подключаю к обеим страницам сайта один и тот же script.min.js. На странице, для которой изначально разрабатывался script.min.js все работает штатно, но на второй странице

Ошибки, которые отключают вообще скрипты. Я выяснил что ошибки вызывают функции, которые не используются на этой странице. И придумал сделать функцию, которая бы проверяла что за страница и вызывала бы нужные функции. Но у меня не вышло, функции вызываются еще на этапе объвления их как параметров. См. пример. У меня два вопроса. Как исправить ошибки, что у меня на странице, т.е. не вызывать определенные функции. И если это не связано с тем решением, что я попытался реализовать, хотелось бы знать, можно ли передать функцию в другую функцию, чтобы ее там выполнить?

Answer 1

В этом коде

checkPage({
  index: [indexFunc()],
  news: [newsFunc()],
});

происходят вызовы функций indexFunc и newsFunc во время создания объекта - параметра для вызовa checkPage. Эти функции ничего не возвращают, так что в checkPage передается:

{
  index: [undefined],
  news: [undefined],
}

Вы, вероятно, имели в виду:

checkPage({
  index: [indexFunc],
  news: [newsFunc],
});

Строки в цикле

  obj[key][i];
  ...
  obj[key];

ничего не делают. Вероятно, имелось в виду при каких-то условиях вызвать функции:

  obj[key][i]();
  ...
  obj[key]();
READ ALSO
cursor в contenteditable

cursor в contenteditable

Если в первый раз кликнуть на div contenteditable то курсор становится где-то вверху, при наборе текста, он становится на правильное местоКак можно...

226
Проблема с подключением API яндекс карт

Проблема с подключением API яндекс карт

Пытаюсь подключить API яндекс карт в head:

398
Не проходит JSON в запросах

Не проходит JSON в запросах

Всем привет! Есть файл сервера на NodeВ нем есть 2 запроса на добавление данных в базу и получение из базы

268
Как задать столбцу GridView отдельную вьюху?

Как задать столбцу GridView отдельную вьюху?

В столбце очень много всего и одной лямбдой не обойтисьМне надо вынести столбец в отдельный файл

273