167

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

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

他们的 sidebar.js 就是从这个开始的,但是我一辈子都找不到任何文档来解释它的含义。

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

然后它在那个包装器中继续定义一堆函数,所以vars和一些proptotypes- 我可以让我的头脑......

那是什么意思或我在哪里可以找到解释?

4

2 回答 2

177

如果没有看到整个脚本,我不能肯定地说,但它很可能是define来自 RequireJS 的函数,特别是该函数的“ define with dependencies ”形式。它用于定义“模块”:

模块与传统脚本文件的不同之处在于它定义了一个范围良好的对象,以避免污染全局命名空间。它可以显式列出其依赖项并获取这些依赖项的句柄,而无需引用全局对象,而是将依赖项作为定义模块的函数的参数接收。

而“define with dependencies”的形式define描述如下:

如果模块具有依赖项,则第一个参数应该是依赖项名称的数组,第二个参数应该是定义函数。加载所有依赖项后,将调用该函数来定义模块。该函数应该返回一个定义模块的对象。

于 2012-04-26T10:11:13.983 回答
10

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

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

定义需要一个依赖数组,一旦所有这些都以非阻塞方式在后台(异步)加载,定义调用回调,回调反过来接受参数(在这种情况下是依赖)。

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

define([], function() {

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

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

请记住,AMD 有它自己的缺点。希望这可以帮助某人。

于 2019-02-27T23:02:51.943 回答