有没有办法判断我写的函数是否被覆盖或重新定义?例如,假设名为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引擎在名称冲突时抛出错误?
更多信息
我正在加载几个库,我认为其中一个使用与我相同的函数名称。所以在这个例子中,确实没有其他我可以关联的开发人员。它确定我加载的库是否使用相同的函数名称并阻止这样的事情发生。
答案 0 :(得分:1)
虽然关于命名空间的建议很合适,但如果您想要防止覆盖特定功能,您可能也会对Object.defineProperty描述符的writable
和configurable
属性感兴趣:
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();
您应该检查您希望支持的浏览器中的支持,但是,因为某些较旧的浏览器可能不支持此功能。