在JavaScript中使用的'define'是什么(除了显而易见的)?

时间:2012-04-26 10:06:24

标签: javascript requirejs requirejs-define

我已经搜索了关于此的文档的高低,但我在任何地方都找不到任何东西。

我正在使用Aloha并希望使用他们的侧边栏原型来创建一个附加到其他插件功能的新侧边栏。

他们的sidebar.js从这开始,但我不能为我的生活找到任何解释它意味着什么的文档。

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {

然后在该包装器中继续定义一组函数,所以vars和一些proptotypes - 我可以解决这个问题......

那是什么说法或在哪里可以找到解释?

2 个答案:

答案 0 :(得分:168)

我不能在没有看到整个脚本的情况下肯定地说,但它可能是define function from RequireJS,特别是该函数的“define with dependencies”形式。它用于定义“模块”:

  

模块与传统的脚本文件不同   定义一个范围广泛的对象,避免污染全局   命名空间。它可以显式列出其依赖关系并获得处理   这些依赖项而不需要引用全局对象,但是   而是接收依赖关系作为函数的参数   定义模块。

define的“依赖关系定义”形式描述如下:

  

如果模块具有依赖关系,则第一个参数应该是数组   依赖项名称,第二个参数应该是一个定义   功能。将调用该函数以一次性定义模块   依赖项已加载。该函数应该返回一个对象   定义模块。

答案 1 :(得分:1)

这是用于编写模块的AMD模式,当您需要基本异步导入模块而不是commonJS之类的模块时,AMD代表“异步模块定义”。

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});

Define接受一组依赖项,一旦所有这些都以非阻塞方式加载到后台(异步)中,define调用回调,后者又接受参数(在这种情况下为依赖项)。

要注意的另一件事是,这些模块中的每个模块也都需要使用“ define”关键字进行定义。因此,例如,module1的定义如下:

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});

这种编写模块的方式(AMD)允许您在编写时考虑到浏览器的兼容性(无需像nodeJS那样使用require()),还可以定义许多格式,包括对象,JSON等,例如,commonJS需要将模块对象。

请记住,AMD有其自身的劣势。希望这对某人有帮助。