web-dev-qa-db-ja.com

JavaScriptで使用される「定義」とは何ですか(明らかなことは別として)。

これに関するドキュメンテーションを高低で検索しましたが、どこにも何も見つかりません。

私はAlohaを使用しており、そのサイドバープロトタイプを使用して、他のプラグイン機能に接続された独自の新しいサイドバーを作成したいと考えています。

彼らのsidebar.jsはこれで始まりますが、それが何を意味するのかを説明するドキュメントを見つけることはできません。

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

その後、そのラッパー内で一連の関数を定義するため、varsといくつかのproptotypes-を定義します。

それは何を言っているのですか、どこで説明を見つけることができますか?

157

スクリプト全体を見ずに確実に言うことはできませんが、それはおそらくRequireJSの define関数 、特に「 define with dependencies "その関数の形式。 「モジュール」を定義するために使用されます。

モジュールは、グローバルネームスペースの汚染を回避する適切なスコープのオブジェクトを定義するという点で、従来のスクリプトファイルとは異なります。グローバルオブジェクトを参照する必要なく、依存関係を明示的にリストし、それらの依存関係のハンドルを取得できますが、モジュールを定義する関数の引数として依存関係を受け取ります。

defineの「依存関係を定義する」形式は次のように説明されます。

モジュールに依存関係がある場合、最初の引数は依存関係名の配列であり、2番目の引数は定義関数でなければなりません。すべての依存関係がロードされると、モジュールを定義するために関数が呼び出されます。関数は、モジュールを定義するオブジェクトを返す必要があります。

170
James Allardice

これは、commonJSのようなものではなく、基本的に非同期でモジュールをインポートする必要がある場合に、AMDが非同期モジュール定義を表すモジュールを記述するための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()を使用せずに)記述できます。また、例えばcommonJSがオブジェクトである必要がある一方で、オブジェクト、JSONなどを含む多くの形式を定義できます。

AMDにはそれ自体の没落があることに留意してください。これが誰かを助けることを願っています。

2
TheeBen