если функция не существует, напишите функцию - javascript - PullRequest
15 голосов
/ 12 января 2012

В php я пишу следующее

<?php
if(x != 0) {
echo "function myfunction(){};";    
}
?>

В JavaScript я хочу проверить, существует ли функция, а если нет, выписать пустую функцию

if(typeof myfunction != 'function'){
    function myfunction(){};
}

Это прекрасно работает в Firefox, но в Chrome, даже если функция typeof равна, она все равно входит и создает пустую функцию. Я не могу найти обходной путь для chrome, я пробовал if (! Myfunction), if (typeof window.myfunction! = 'Function), но, похоже, здесь ничего не работает для chrome, когда все кажется работающим в firefox. Есть идеи?

Ответы [ 2 ]

32 голосов
/ 12 января 2012

Используйте выражение функции, а не объявление функции.

if(typeof myfunction != 'function'){
   window.myfunction = function(){};
}

(я использую window, поскольку в последнем абзаце предлагается использовать глобальную функцию)

6 голосов
/ 12 января 2012

Вы должны использовать оператор строгого сравнения! ==

if(typeof myFunction !== 'function'){
    window.myFunction = function(){}; // for a global function or
    NAMESPACE.myFunction = function(){}; // for a function in NAMESPACE 
}

Также старайтесь хранить функции js внутри пространств имен, чтобы в будущем избежать конфликтов с другими библиотеками js.

...