什么是’定义’在 JavaScript 中使用(除了显而易见的) ?

我到处搜索有关这方面的文档,但就是找不到任何东西。

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

他们的 sidar.js 以这个开始,但我无论如何也找不到任何文档来解释它的含义。

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

然后在这个包装器中定义一系列函数,所以 vars和一些 proptotypes-我可以大致理解..。

那句话怎么说来着,我上哪儿能找到解释呢?

92353 次浏览

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

模块不同于传统的脚本文件,因为它 定义一个范围良好的对象,以避免污染全局 它可以显式地列出它的依赖项并获得 这些依赖项不需要引用全局对象,但是 而是将依赖项作为参数接收到 定义模块。

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

如果模块具有依赖项,则第一个参数应为数组 第二个参数应该是一个定义 函数将被调用来定义模块 函数应该返回一个对象 定义模块。

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

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

Definition 接受一个依赖项数组,一旦所有这些依赖项以非阻塞方式加载到后台(异步)中,则定义调用回调,回调接受参数(在本例中为依赖项)。

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

define([], function() {


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

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

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