2012-01-12 84 views
12

在PHP中我寫了下面的如果功能不存在,寫入功能 - JavaScript的

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

在javascript中我想測試,如果函數存在,如果不寫出來一個空函數

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

這在firefox中效果很好,但是在chrome中即使typeof等於函數仍然會進入並創建空函數。我無法找到鉻的工作,我試過如果(!myfunction),如果(typeof window.myfunction!='function),但似乎沒有任何工作在Chrome瀏覽器,當一切似乎在Firefox中工作。有任何想法嗎?

+0

還是沒有答案?我有同樣的問題,下面的解決方案不適合我。 – 2012-12-17 20:22:54

回答

29

使用函數表達式,而不是函數聲明。

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

(我使用window,因爲你的最後一段表明你想有一個全局函數)

+0

這完美謝謝 – 2012-01-12 18:03:50

+0

標記爲答案呢? – folktrash 2015-02-24 15:12:13

+0

@BretThomas如果這有效,請將其標記爲答案。 – 2015-09-11 19:41:00

6

你應該用嚴格的比較操作符!==

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

而且儘量保持JS功能在命名空間內部,這樣可以避免將來與其他js庫的衝突。