有没有办法判断JavaScript中的函数是否被过度编写?

有没有办法判断JavaScript中的函数是否被过度编写?,javascript,firebug,Javascript,Firebug,有没有办法判断我编写的函数是否被覆盖或重新定义?例如,假设一个叫Jack的家伙具有以下功能: // Jack's function on team 1 function doSomething() { // doing things } 有一天,他发现Zaxxon星球北极的一个队友使用了相同的函数名: // Zaxar's function on team 2 function doSomething() { // doing something else } 如您所见,Za

有没有办法判断我编写的函数是否被覆盖或重新定义?例如,假设一个叫Jack的家伙具有以下功能:

// Jack's function on team 1
function doSomething() {
    // doing things
}
有一天,他发现Zaxxon星球北极的一个队友使用了相同的函数名:

// Zaxar's function on team 2
function doSomething() {
    // doing something else
}
如您所见,Zaxar和Jack使用相同的函数名。直到项目实施6个月后,Zaxar和John才发现问题。他们知道他们可以在函数中添加警报,并在运行时进行检查,但假设Zaxar和Jack都有2万亿个函数,他们使用了一百万个JavaScript库,他们意识到在每个函数中添加警报是不切实际的

有没有办法帮助Zaxar和Jack发现运行时是否存在名称冲突?或者是否有一个设置会告诉JavaScript引擎在名称冲突时抛出错误

更多信息

我正在加载一些库,我认为其中一个库使用了与我相同的函数名。所以在这个例子中,我真的没有其他的开发人员可以与我联系。它会发现我加载的库是否使用相同的函数名,并防止类似的事情发生

尽管关于名称空间的建议很合适,但如果您想防止覆盖特定函数,您可能还对描述符的
可写
可配置
属性感兴趣:

Object.defineProperty(window, "myUnchangeableFunction", {value: function () {
    alert("Can't change me");
}, writable: false, configurable: false});

/*
function myUnchangeableFunction () { // TypeError: can't redefine non-configurable property 'myUnchangeableFunction'
    alert('change?');
}

var myUnchangeableFunction = function () { // TypeError: can't redefine non-configurable property 'myUnchangeableFunction'
    alert('change?');
};
*/

myUnchangeableFunction();

但是,您应该检查您希望支持的浏览器中的支持,因为一些较旧的浏览器可能不支持此功能。

也许JSHint会有所帮助?杜努。。。但我的建议是,它们分别遍历代码,将所有函数放在一个对象(名称空间)中,并用前缀替换所有调用。有一个像样的编辑器不需要很长时间。真正的解决方案是让每个开发人员或项目的每个部分都在自己的名称空间中工作。适当的名称选择和良好的沟通将避免此类问题。假设他们在同一个项目上工作,并且有一个同名的函数,那么它也会做同样的事情。因此,应该从项目中删除一个。如果项目在这么大的问题上走到了这一步,那就是项目管理的失败(通信、设计和测试都失败了)。您可以获取每个函数的字符串,对其进行md5,并与另一台机器上的签名进行比较。既然firefox不再使用函数源代码,那么一切都应该匹配。