3

有没有办法判断我编写的函数是否被覆盖或重新定义?例如,假设一个名叫 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 使用相同的函数名称。Zaxar 和 John 在项目进行 6 个月之前都没有发现这个问题。他们知道他们可以在他们的函数中放置一个警报并在运行时检查它,但是假设 Zaxar 和 Jack 都有 2 万亿个函数并且他们正在使用 100 万个 JavaScript 库,他们意识到在每个函数中放置警报是不切实际的。

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

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

4

1 回答 1

1

尽管命名空间的建议很贴切,但如果您想防止覆盖特定函数,您可能还对Object.definePropertywritable描述符的和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();

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

于 2013-10-14T06:09:45.977 回答