我正在尝试将一个大的JQuery文件重构为较小的文件,但其中一个原因是我必须能够在另一个JQuery文件中调用函数,但是我无法让它工作。那么如何更改此代码以便我可以从File2.js中调用File1.js中的someFunction?
//File1.js
(function (s_diary, $, undefined) {
function someFunction()
{
alert("Yay");
}
} (window.s_diary= window.s_diary|| {}, jQuery));
//File2.js
(function (s_one, $, undefined) {
function someFunction()
{
s_diary.someFunction();
}
} (window.s_one= window.s_one|| {}, jQuery));
答案 0 :(得分:3)
更仔细地看一下,格式化,评论和更改以显示点:
(function (s_diary, $, undefined) {
// the someFunction function is private to this function
// it has the same scope as a function parameter or local var
function someFunction() {
alert("Yay");
}
// but since all functions are just objects...
// someFunction is now *exposed* as window.s_diary.someFunction
// see below for why window.s_diary is modified
s_diary.someFunction = someFunction
}(window.s_diary = window.s_diary || {}, jQuery));
请注意,最后(...)
位调用先前定义的函数对象,并传入名称为window.s_diary
的对象(如果需要,创建它)。然后在函数中“window.s_diary”对象被突变。请记住,window
是全局命名空间,因此可用于单个页面上下文中的所有scrips 。 (只需确保它们以正确的顺序运行。)
快乐的编码。
答案 1 :(得分:2)
也许你可以这样做,如果我没记错的话,它被称为“揭示模块模式”:
var file1 = (function (s_diary, $, undefined) {
function someFunction()
{
alert("Yay");
};
return{
someFunction: someFunction
};
} ());
var file2 = (function (s_one, $, undefined) {
function someFunction()
{
file1.someFunction();
}
} (window.s_one= window.s_one|| {}, jQuery));