2013-02-26 46 views
-1

我有我的这种结构工程几个js文件:如何调用方法

(function (window, $) { 
    var reload = function (force) { /* implementation here */ }; 
    //more variables are here, the same construction as above 
})(this, $); 

更多此类文件,对每个部分(页)的网站有一个JS用这种结构来管理页。整个网站是一个单独的页面,这些js文件通过隐藏,显示和填充内容来管理DOM节点,这给用户带来了他/她浏览多个页面的错觉。

  1. 我想获得有关上述结构是如何加载一个简单的解释 - 我看到加载所有这些JS脚本head.js库,但我不明白的地方被加载,如何访问它。

  2. 我想知道如何通过我自己访问我需要的特定reload()。正如我告诉你的,更多的js文件具有相同的结构(resources.js,users.js,reports.js等)。我如何访问里面的重载功能,比方说,reports.js按钮在html上按下我加载所有这些脚本?

+0

您在上面显示的JS功能是自执行加载JS文件时一次。如果没有更多信息,很难帮助您。 – sdespont 2013-02-26 14:57:51

+1

这是一个非常开放的问题,与应用程序中的JavaScript架构相关。我会建议阅读关于JavaScript模块和命名空间。搜索“模块模式”。请参阅http://www.klauskomenda.com/code/javascript-programming-patterns/#module中的“揭示模块模式”。 – DanC 2013-02-26 14:59:55

回答

1

这是一个自我调用的函数,为避免重复使用变量标识符和破坏第三方代码,这是一种很好的做法。

另一点是自调函数内声明的变量在函数体的范围内或全局范围内都可用。这也很好,因为在脚本中创建的“垃圾”可以在函数结束时收集(好吧,并非总是在clousure中使用它们)。另外,既然你在函数范围中声明了这样的变量,其他库在他们自己的“自调用函数作用域”中执行的东西将会使用像你这样的变量和函数标识符,但这不会造成任何问题,因为两者都是不同的范围!

function (window, $) 

在上面签字的情况下,自调用的函数有两个输入参数:

  • 窗口将持有的JavaScript的浏览器窗口对象。
  • $将保存一个快捷方式对象或函数(通常是jQuery)。

声明这样的输入参数,你避免了很多问题,因为人们可以重用window标识和存储其他的对象,但你的自我调用函数范围内,window无论如何都会保持Window对象监守这是一个不同的参考。

如何访问里面的重载功能,比方说,在html上按下按钮的reports.js我加载了所有这些脚本?

你正在声明一个存储整个reload()函数的局部变量。为了能在任何范围内访问它,你需要声明它在全球范围内

var reload = null; 

(function (window, $) { 
    // Setting the variable living in the global scope! 
    reload = function (force) { /* implementation here */ }; 

    //more variables are here, the same construction as above 

})(this, $); 
1

考虑到这段代码,对#2的回答是:您无法从外部访问reload。它被声明为“立即调用的函数表达式”的局部变量,该函数一旦被定义就会被调用(它回答#1,我希望)。

通常,这是用来创建模块,将公开一些方法和属性。例如,如果代码是:

var obj = (function (window, $) { 

    var reload = function (force) { /* implementation here */ }; 

    return { 
     reload : reload 
    }; 

})(this, $); 

然后,你可以调用realod

obj.reload(); 
1

,除非你修改这些.js文件无法访问这些变量。

(function (window, $) { 

    var reload = function (force) { /* implementation here */ }; 

    //more variables are here, the same construction as above 

    window.reload = reload; 

})(this, $); 

上面的代码使变量/方法reload可以从代码之外获得。