JavaScript中的“定义”是什么(除了显而易见的)?


161

我在文档中搜索了很多内容,但是在任何地方都找不到。

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

他们的sidebar.js以此开始,但是我一生都找不到能解释其含义的文档。

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

它接着在包装定义一组函数,所以vars有的proptotypes-我可以只是身边让我的头......

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


Answers:


173

我不能肯定地说不看完整的脚本,但是它很可能是defineRequireJS中函数,特别是该函数的“ 带有依赖项的定义 ”形式。它用于定义“模块”:

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

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

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


1
是的,绝对是这样-所以它是require.js的一部分,要使用该标记,您需要requirejs.org
David O'Sullivan

4
以及哪些版本的IE不支持此功能... ;-)
Simon_Weaver 2014年

1
@Simon_Weaver-不确定您的意思是... IE6 +支持RequireJS 。
James Allardice 2014年

很高兴知道:)我当时有些was昧,但我也认为这是比IE6更新的构造
Simon_Weaver

1
@Simon_Weaver这不是Java语言的构造,而是普通的Javascript函数。方括号创建一个数组。还是您所指的构造?
罗宾·格林

3

这是用于编写模块的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有其自身的缺点。希望这对某人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.