2016-02-01 61 views
-1

我想做這樣的事情;問題是(typeof myfunc =='function')始終爲真,因爲它是相同的函數名稱。是否有可能以某種方式從typeof範圍中排除該自稱函數?如何檢測一個函數已經在同名函數中

function myfunc() { 
    alert('old');  
} 

function myfunc() { 
    if (typeof myfunc == 'function') {  
     // alert('old');   
     alert('new'); 
    } else { 
     alert('myfunc does not exist'); 
    } 
} 
+4

嗯,好了,第二個功能完全覆蓋第一個,如兩個功能不能具有相同的名稱,所以基本上你只有一個功能,最後一個問題解決了,金星給我了嗎? – adeneo

+4

你試圖解決什麼問題? –

+0

這甚至不是'typeof'所做的。爲什麼不試試'myfunc == otherfunc'? – somethinghere

回答

1

考慮到

function myfunc() { } // first definition 
function myfunc() { } // second definition 

是基本相同

var myfunc; 
myfunc = (function() { }); // first definition 
myfunc = (function() { }); // second definition 

你可以在這裏看到,名稱myfunc存在,是指一個函數對象。第一個定義不再存在,因爲第二個定義已經取代它。

我認爲最接近的可能是使用函數表達式並在(重新)定義函數之前測試存在。

var myfunc; 
myfunc = (function() { }); 
if (typeof myfunc === 'function') { 
    alert("Function exists"); 
} else { 
    alert("Did not exist, create (new) definition now"); 
    myfunc = (function() { }); 
} 
1

你試圖做的事情是不可能的。在覆蓋之前,您需要首先捕獲該函數。

var _orgFnc = window.myfunc; //assuming it is global 
function myfunc() { 
    if (_orgFnc) {  
     // alert('old');   
     alert('new'); 
    } else { 
     alert('myfunc does not exist'); 
    } 
} 

如果它不是全局的,你需要做的基本上

var _orgFnc = (typeof myfunc === "function") ? myfunc : null; 
相關問題