在网页加载后覆盖现有的javascript方法 - 应该可以吗?

时间:2015-12-03 23:29:55

标签: javascript jquery

我有一个页面,它使用各种内部企业javascript文件来实现某些功能。在我们将这些文件包含在页面上之前,这些文件会缩小。

页面加载后,在浏览器的javascript控制台中,我可以向现有的内部javascript对象添加方法,如:MyCompany.CompanyObject.newMethod = function(){...},这似乎可以正常工作。

覆盖现有方法效果不佳。如果我MyCompany.CompanyObject.existingMethod = function(){...}看起来处于暂停状态,但是当我们实际调用existingMethod时,它正在使用我们的缩小javascript文件中定义的旧定义。

如果我在existingMethod所在的缩小javascript文件上设置断点,并且(比方说)在DOM元素上触发jQuery click事件来触发它,断点就会停止在旧方法定义上 - 这是有道理的,因为那是缩小文件中的内容。

但是,如果我在页面加载后重新定义existingMethod,那么应该发生这种情况吗?重新定义方法后,我们没有重新加载页面,所以不应该是我的新定义被删除的情况。

我认为我正在做的事情是可能的,而且在我的具体案例中可能会出现奇怪的事情,但是想知道我正在尝试做什么 可能?在浏览器控制台中尝试此操作时,是否有任何奇怪的源缓存?

1 个答案:

答案 0 :(得分:1)

当你覆盖现有方法时,你不是要改变方法本身,而只是改变方法的引用并使它指向新方法(所以现在内存中有两种方法)。

如果代码将对旧方法的引用传递给其他人(比如将其设置为事件处理程序),则将继续调用旧方法。

您应该查看堆栈跟踪以查看谁正在调用旧方法,然后尝试找出它们从哪里获取引用。