【问题标题】:JavaScript Encapsulation / JQueryJavaScript 封装/JQuery
【发布时间】:2011-02-14 14:50:18
【问题描述】:

我试图弄清楚如何使我的应用程序中的页面变量不被全局定义。我想出了一些方法,但想知道是否有人们使用的通用标准方法。

我使用这种方法降低了我的插件设计模式:http://www.virgentech.com/blog/2009/10/building-object-oriented-jquery-plugin.html。但我只是不确定如何处理我的页面级封装。

【问题讨论】:

    标签: javascript oop namespaces encapsulation


    【解决方案1】:

    通常是这样实现的:

    (function(){
    
        var myLocal = "I'm local!";
    
        window.myGlobal = "I'm global!";
    
    })();
    

    【讨论】:

    • 当我知道 jQuery 存在时,我通常会污染$ 命名空间而不是window$.myCompany 成为挂钩点,其他所有内容都被包裹在一个函数外壳中。
    • +1 实际上,这是 jQuery 本身用于相同目的的方法。 jquery.js 的全部内容是这样包装的:(function(window, undefined) { ... })(window); 虽然我不太明白需要将window 传递给函数。即使window 没有通过,我认为它仍然可以在容器函数中使用。
    【解决方案2】:

    Vincent 采用了最严密的方法(将所有内容包装在一个函数中)。

    人们做的另一件事是定义一个或多或少用作包的命名空间的全局对象。

    window.ChrisPkg = {
       global1: ['a','b','c'],
       global2: 42
       globalfunc: function () { alert('hello world!'); }
    }
    
    ChrisPkg.extraGlobal = 'foo';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多