JavaScriptで使用される「定義」は何ですか(明白なものは別として)?


161

私はこれについてのドキュメントを探して高低を検索しましたが、どこにも何も見つかりません。

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

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

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

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

そのことわざは何ですか、またはどこに説明がありますか?


回答:


173

スクリプト全体を確認しないとはっきりとは言えませんが、それdefineはRequireJS関数である可能性が高く、特にその関数の「依存関係で定義する」形式です。「モジュール」の定義に使用されます。

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

また、「依存関係で定義する」形式はdefine次のように記述されます。

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


1
間違いなくそうです。require.jsの一部であり、そのマークアップを使用するにはrequirejs.orgが必要です
David O'Sullivan

4
IE
のどの

1
@Simon_Weaver-意味がわからない... RequireJSはIE6 +でサポートされています
James Allardice 2014年

それは知っておくと
役に立ち

1
@Simon_Weaver Javascript言語の構造ではなく、通常のJavascript関数です。角括弧は配列を作成します。それとも、あなたが参照していた構成ですか?
Robin Green

3

これは、モジュールを作成するためのAMDパターンであり、commonJSのようなものではなく、基本的に非同期でモジュールをインポートする必要がある場合の非同期モジュール定義を表します。

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

Defineは依存関係の配列を取り、それらすべてが非ブロッキングの方法でバックグラウンド(非同期)に読み込まれると、コールバックを呼び出します。コールバックは引数(この場合は依存関係)を受け入れます。

注意すべきもう1つの点は、これらのモジュールのそれぞれが「define」キーワードを使用して定義される必要があることです。したがって、たとえばmodule1は次のように定義されます。

define([], function() {

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

このモジュールの記述方法(AMD)を使用すると、ブラウザーの互換性を念頭に置いて(nodeJSのようにrequire()を使用せずに)記述できます。また、例えばcommonJSがオブジェクトである必要があるモジュールなど、オブジェクトやJSONなどの多くの形式を定義できます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.