我想做这样的事情;问题是(typeof myfunc ==' function')始终为true,因为它是相同的函数名。是否有可能以某种方式从类型范围中排除自我名称功能?
function myfunc() {
alert('old');
}
function myfunc() {
if (typeof myfunc == 'function') {
// alert('old');
alert('new');
} else {
alert('myfunc does not exist');
}
}
答案 0 :(得分: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 :(得分: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;