跨文件覆盖js函数的时序问题

时间:2013-02-14 22:58:25

标签: javascript jquery

在我的rails项目中,我编写了一个javascript函数来覆盖另一个文件中定义的另一个对象的默认行为。执行此操作的行看起来像:

window.someObject.methodToOverride = function...

最初这会给我一个cannot set property 'methodToOverride' of undefined错误,我假设这与时间问题有关(someObject尚未设置)。我能够通过在jQuery $(document).ready函数中删除它来解决这个问题,但是当它起作用时,对我来说似乎有些笨拙。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

这听起来像是在寻找require.js。它的作用是让你模块化地设置你的代码,定义哪个模块取决于哪个。在你的情况下,一旦设置,通过放置一个包装,如

require(["someObject"], function (someObject) {
    someObject.methodToOverride = function...
}

当你使用这个函数时,require.js将动态加载你的someObject文件,当它被完全加载时,将someObject作为参数传递给你提供的函数。它可以处理更复杂的示例,包含任何级别和任意数量的依赖项,根据需要加载它们不超过一次。

您可以在SO上找到有关require.js的更多信息,例如: