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

问题描述 投票:153回答:2

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

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

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

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

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

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

javascript requirejs requirejs-define
2个回答
170
投票

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

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

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

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


2
投票

这是用于编写模块的AMD模式,AMD代表异步模块定义,当你需要基本上导入模块async时,而不是像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需要模块作为对象。

请记住,并有自己的垮台。希望这有助于某人。

© www.soinside.com 2019 - 2024. All rights reserved.