2014-12-06 90 views
0

通常,在JavaScript中,我会看到一个匿名函数,该函数会立即调用,它包含一个构造函数。事情是这样的:在IIFE中访问构造函数

(function(){ 
    function Constructor{}; 
    //code and stuff 
})(); 

这似乎是有利的,因为它使一个封闭,这样你就可以保持独立的函数中的变量,在全局范围内(?)。我无法理解的是,我将如何从全局范围内访问此构造函数。例如,假设上面的代码被包含在一个JavaScript文件中,该文件被带入脚本标签的HTML文档中。现在,在文档中(在另一个脚本标签中)如何使用匿名函数中的构造函数实例化对象?

回答

1

如上所述,立即调用的功能的主要目的是防止全球范围的污染。因此,在IIFE中声明的所有变量和函数只能在该函数中访问。

正如我从你的例子中所理解的,你试图模块化你的应用程序,并将你的各种应用程序逻辑分成不同的脚本文件。我建议你看一看模块模式:

var Module1 = (function() { 

    return { 
     Constructor: function Constructor(){ 
      console.log('Hi, there!'); 
     } 
    } 
})(); 

然后,你可以简单地使用下面的代码访问的构造函数:

var test = Module1.Constructor(); 
+0

的OP也可以直接返回构造函数本身。它不需要嵌入对象中。 – jfriend00 2014-12-06 22:35:53

+0

是的。但我推测他可能想要返回的不仅仅是一个功能。 – 2014-12-06 22:36:48

+0

是的,我试图模块化一个脚本文件。因此,模块模式正是我需要理解的。 [这篇文章](http://toddmotto.com/mastering-the-module-pattern/)在这个问题上闪闪发光,并很好地补充了你的答案。 – chRyNaN 2014-12-07 00:34:19

相关问题