将数据传递给封装的javascript代码

时间:2011-02-25 13:22:21

标签: javascript jquery

在我的webapp中我有一个像这样的变量

var data = {
     getItem: function(key){
         ...
     }
}

在我的所有脚本中,我都可以使用

data.getItem("Test");

但我怎样才能在jquery plugins中使用它?插件通常具有以下结构

(function($, window, document) {   
     //....plugin-code
});

我该如何称呼这种结构?是否可以在此类插件中使用我的全局数据变量?

2 个答案:

答案 0 :(得分:1)

如果您的数据变量是全局的,那么您可以在任何地方使用它,包括在jQuery插件中。

您需要确保在任何将要使用它的自执行函数之前定义数据。

答案 1 :(得分:1)

实际上他们往往有结构

(function($) {   
    // plugin-code
})(jQuery);

要点

  1. 他们可以假设此范围内的$将永远是jQuery,无论加载什么其他定义$例如原型
  2. 所有内容都在此闭包中定义,因此只有您选择公开的内容($.fn$.extend)才泄露给外界
  3. 显然,如果你的环境只是你的插件,你可以假设你总是在运行$ = jQuery,那么你就不需要这些了。 (你们还有文档和窗口:我从来没有看到过这些被覆盖的内容,我不确定除了文档和窗口本身之外,你们在这里作为参数传递了什么?)

    您是在询问如何在插件中定义数据或从插件范围外部引入数据?你可以在里面写什么没有限制,所以如果你在里面定义和使用它,你的代码将完全像befoer一样工作。如果您需要从外部访问内部定义的数据,那么您需要以某种方式泄露它,例如将访问器方法添加到$,document或window之一。

    如果您从插件范围外部提取数据,那么您仍然可以从闭包内部访问全局变量,或者您可以将其作为额外参数传递 - 我认为这没有任何区别。