js および jsui オブジェクトは、Max 環境で Javascript バージョン 1.5 を実行します。このトピックでは、js および jsui オブジェクトでの実装にあたって、Javascript 言語 に追加される固有な関数についての情報を扱います。これは、Javascript プログラミングのための一般的なリファレンスではありません。Javascript に関するオンライン上でのリソースは次のサイトで得ることができます。
http://developer.mozilla.org/en/docs/JavaScript
訳注:日本語によるリソースは次の URL にあります。
http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Reference
js および jsui オブジェクトで用いられる Javascirpt では、ウェブブラウザに特有の関数やプロパティは含まれていません。
jsui オブジェクトに特有なユーザインターフェイス関数とプロパティは、Javascript グラフィックスに関するトピックで述べています。このトピックで述べられている全ての情報は、特に注記していない限り、js オブジェクトについてのみ書かれている場合でも js と jsui をカバーしています。Javascirpt はスクリプトに「コンパイル」されるテキスト言語です。スクリプトにはグローバルコードと関数があります。関数の外にある式やステートメント(文)はグローバルコードとみなされます。
var a = 2; // グローバルコード function assign(x) { a = x;// 関数内のステートメント、グローバルコードではありません }
グローバルコードは Javascript ソースファイル がコンパイルされた後、直ちに実行されます。これによってグローバル変数やプロパティを初期化することができます。グローバルコードで関数を呼び出すこともできますが、 js オブジェクトへ送られるメッセージによって呼び出すこともできます。この方法では、関数に与えられる名前はメッセージの名前と同じものになり、これを Max ユーザが呼出しに使用します。そのため、これは JavaScript によって新しい Max オブジェクトを実現する方法として、とても分かりやすいものです。
例えば、先ほどの Javascript ソースが js オブジェクトの中へコンパイルされた場合、次のようなパッチ内のメッセージボックスをクリックすることによって、アーギュメントの 10 と共に assign() 関数が呼び出されます。
js オブジェクトは、テキストファイルとして保存されている Javascript だけを使用します。Javascript コードは別のテキストエディタを使って書くことも、Max に組み込まれているテキストウィンドウを使って書くこともできます。ビルトイン(組み込み)ウィンドウを使う場合、js オブジェクトはファイルを保存するたびごとにその Javascript ソースの再コンパイルを行います。他のテキストファイルエディタを使う場合、js オブジェクトに compile メッセージを送る事によって、テキストファイルのソースを再コンパイルすることができます。あるいは、js オブジェクトに autowatch 1 というメッセージを送ることによって、ファイルが保存されるたびごとにオブジェクトが自動的に再コンパイルを行うようにすることもできます。
Javascript は、ソフトウェアをコントロールするためにデザインされている言語で、自分自身もソフトウェアの中に埋め込まれています。言い換えれば、アプリケーションのスクリプトを書くためにデザインされた言語であるとも言えます。Javascript コードは常に、新しいプロパティや関数を追加することができるスクリプトのコンテキストの中で実行されます。これは一例ですが、Netscape に対して Web 開発者にはなじみ深いブラウザ特有の機能を追加した方法でもあります。
Max の js オブジェクトの中にあるスクリプトのコンテキストを理解するためには、あなたが扱っている Max の世界の Javascript モデルが存在することを自覚しておくことが重要です。おそらく、このモデルの最も重要な側面は、Max の js オブジェクト自身の Javascript のバージョンが存在するということです。このドキュメントではこれを jsthis オブジェクトと呼びます。このオブジェクトは、関数やグローバルコードを書くにあたって、あなた自身がビルドしたプロパティとメソッドに「基づいて」います。これについては、いくつかの実例によって明らかになるはずです。前に挙げた Javascript を再び検討してみましょう。
var a = 2; // グローバルコード function assign(x) { a = x;// 関数内のステートメント、グローバルコードではありません }
関数 assign() は、jsthis のメソッドになり、変数はそのプロパティになります。Javascript では、メソッドはオブジェクトに対するドット記譜法によって呼び出されます。上のコードを、Javascript 環境が持つオブジェクト指向の性質をより明らかにするために、オプションである Javascript の this キーワードを使って次のように書き直すことができます。さらに、ここでは assign() を呼び出す新しい関数 provoke() を追加しています。
this.a = 2; // グローバルコード function assign(x) { this.a = x; //関数内のステートメント。グローバルコードではありません。 } function provoke() { this.assign(1000); }
しかし、オブジェクト指向の用語や概念がなんとなく苦手だという場合には、実際にはこれらのセマンティック(意味論的)な詳細について必ずしも関心を持つ必要はありません。
Javascript の jsthis オブジェクトは、Max 環境で処理を行なうために使用する必要がある特定のビルトイン(組み込み)プロパティとメソッドを持っています。例えば、データをアウトレットから送信するために outlet() というメソッドがあります。また、Max の js オブジェクトのタイプイン・アーギュメントにアクセスしたり、どのインレットがメッセージを受け取ったかを認識したり、オブジェクトが持つインレットやアウトレットの数を定義したりすることもできます。これらの機能は、後述の jsthis オブジェクトのセクションに記述されています。
単語 this は一般的にはオプションですが、その時点の jsthis インスタンスを関数に渡す場合に、これを使う必要があるかも知れません。例えば、jsthis オブジェクトへの参照をアウトレットから送信することができます。また、Task オブジェクトを作る場合にこれを使います(後述のTask の詳細を参照して下さい)。
jsthis に加え、Javascript Max モデルの概念は、コンテクストの一部として定義される一連の Javascript クラスを備えています。js オブジェクトのための主要なものの1つは、新しいオブジェクトを生成し、接続し、移動させることができるパッチャースクリプティング機能のためのよりパワフルなインターフェイスです。Max、Patcher、Wind、Maxobj クラスはスクリプト、およびアプリケーションコントロールで使われます。Task オブジェクトは、Max スケジューラに対する便利な Javascript インターフェイスを提供します。Folder クラスによって、ファイルを列挙することができます。また、Global クラスによって、Max の send 及び receive オブジェクトへのインターフェイスと同じように、異なる js インスタンスがお互いに通信を行なったり、データを共有したりすることができます。これらの Javascript クラスのプロパティと関数を挙げていく前に、js および jsui オブジェクトのJavascript ソーステキストファイルの取り扱い方に目を通しておきましょう。
js オブジェクトにのみ適用する事項:オブジェクトボックスに、アーギュメント無しで js だけをタイプした場合、何も行なわない、1つのインレットとアウトレットを持つオブジェクトができます。js オブジェクトの最初のアーギュメントは何らかの Javascript ソースのファイル名になります。Javascript ソースファイルの最後は、.js という拡張子で終わるという慣例があります。実際に、ファイルに myscript.js というような名前をつけ、js myscript とタイプすることもできます。js オブジェクトは、myscript.js というファイルが Max サーチパス内にあると仮定して、そのファイルを探します。
jsui オブジェクトにのみ適用する事項:jsui オブジェクトに Javascript ソースファイルを割り当てるにはいくつかの方法があります。