有没有办法判断JavaScript中的函数是否越过了?

时间:2013-10-14 05:41:28

标签: 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
}

正如您所看到的,Zaxar和Jack正在使用相同的函数名称。直到项目开始6个月后,Zaxar和John都没有发现问题。他们知道他们可以在他们的功能中发出警报并在运行时检查它,但是让我们说Zaxar和Jack都有2万亿个函数,他们使用了100万个JavaScript库,他们意识到在每个函数中放置警报是不切实际的。

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

更多信息
我正在加载几个库,我认为其中一个使用与我相同的函数名称。所以在这个例子中,确实没有其他我可以关联的开发人员。它确定我加载的库是否使用相同的函数名称并阻止这样的事情发生。

1 个答案:

答案 0 :(得分:1)

虽然关于命名空间的建议很合适,但如果您想要防止覆盖特定功能,您可能也会对Object.defineProperty描述符的writableconfigurable属性感兴趣:

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();

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