jsthis オブジェクト
jsthis オブジェクトは、あなたが定義する任意の関数のコンテクストの中では this であり、グローバルコードだけでなく Max から呼び出すこともできます。関数を定義すると、それらは jsthis に対してあなたが行なった拡張のメソッドになります。グローバルコードの中で変数をを定義すると、それらは jsthis のプロパティになります。jsthis オブジェクトには、Max 環境との情報のやり取りや、そのコントロールを容易にするビルトインのプロパティとメソッドがあります。
jsthis プロパティ
autowatch (Number, get/set)
自動的なファイルの再コンパイル機能をオンにすると、ファイルが変更された場合に、ファイルを再ロードし、再コンパイルします。この機能は、Javascript コードの開発を行なっている際、同じソースファイルを使っているいくつかの js インスタンスがあり、ソースが変更された時にそれら全てを更新したいような場合、特に役に立ちます。これはまた、外部テキストエディタの使用を容易にするために用いることもできます。テキストエディタがファイルを保存すると、js オブジェクトはそれに気付き、コードの再コンパイルを行ないます。デフォルトでは autowatch の値は 0 (オフ)になっています。autowatch をオンにしたい場合、これをグローバルコードの中で行なうことが最も良い方法です。
box (Maxobj, get)
js オブジェクトを含んでいる Maxobj を返します。これは、jsui オブジェクトがオブジェクトボックスの矩形領域を得る場合に、非常に役立ちます。このオブジェクトに関する詳しい情報は、後述の Maxobj セクションを参照して下さい。
editfontsize (Number, get/set)
スクリプトを編集するテキスト編集ウィンドウのフォントサイズを、ポイント単位でコントロールします。グローバルコードの中で editfontsize プロパティを割り当てることによって、テキスト編集のためのデフォルトフォントサイズを上書きすることができます。デフォルトのフォントサイズは Max ウィンドウに表示されるテキストと同じサイズです。
inlet (Number, get/set)
関数を実行している間、inlet プロパティは、関数をトリガするメッセージを受け取ったインレットナンバを報告します。このナンバは最も左のインレットを 0 として数えます。このプロパティの値はグローバルコードの中では 0 になります。
inlets (Number, get/set)
インスタンスが何個のインレットを持つかを指定します。inlets プロパティが効力を持つためには、はグローバルコード内でセットされなければなりません。セットされない場合、1つのインレットを持つオブジェクトが作られます。
inspector (Number, get/set)
jsui オブジェクトに指定します。inspector プロパティが 1 にセットされると、Max はデフォルトの jsui-insp.pat ファイルではなく、スクリプトの固有なインスペクタパッチを探します。名前はあなたのスクリプト(拡張子 .js はつけません)に -insp.pat を加えたものを使用します。例えば、foo.js というスクリプトの場合、インスペクタファイルは、foo-insp.pat という名前を付けます。インスペクタパッチは Max のサーチパス内であれば、どこへでも置くことができます。
jsarguments (Array, get)
オブジェクトが初期化される際にタイプイン・アーギュメント(タイプ入力されたアーギュメント)にアクセスすることができます。ファイル名は、
jsarguments[0]、第1のタイプイン・アーギュメントは、
jsarguments[1] に格納されています。アーギュメントの数に1を足したものが
jsarguments.length になります。
jsarguments[] はグローバルコード、およびすべての関数の中で使用できます。オブジェクトが初期化された後は、Max の
js オブジェクトが、
jsargs メッセージと共に新しいタイプイン・アーギュメントを受け取らない限り、これを変更することはできません。
例:
js オブジェクトにタイプ入力されたアーギュメントに基づいてアウトレットの数が変化するオブジェクトを作ります。
// 無効なアーギュメント、またはアーギュメントがない場合に備えて、
//テストのデフォルト値をセット
outlets = 0;
if (jsarguments.length >= 2)
outlets = jsarguments[1];
if (!outlets)
outlets = 1;// デフォルト値
max (Max, get)
"max" オブジェクトの Javascript 表現(すなわち、メッセージボックスの
;max preempt 1 の受け側)を返します。これにより、Max アプリケーションをコントロールするオブジェクトに対して任意のメッセージを送ることが可能になります。加えて、max オブジェクトは、後述の「
js Max オブジェクトプロパティ」セクションに挙げられている、
js 固有のプロパティを持っています。下の例では、max オブジェクトに
preempt メッセージを送って、オーバードライブをオンにしています。
max.preempt(1);
maxclass (String, get)
"js" ("jsthis”を返す標準の Javascript class プロパティ)を返します。
messagename (String, get)
現在実行中のメソッドを呼び出すために、
js に送られたメッセージの名前。グローバルコードでは、nil の値になります。これは、ほとんどの場合、
anything() 関数の中でのみ役立ちます。
anything() 関数は、
js オブジェクトに送られたメッセージによって指定される関数名が存在しない場合に呼び出されるものです。次の例は、グローバルコードで宣言された変数にプロパティを追加する
anything() 関数です。変数プロパティを指定するために、javascriptのトリッキーなブラケット([])表記を使用している点に注意して下さい。
var stuff;
function anything(val)
{
if (arguments.length) // アーギュメントがあるか?
stuff[messagename] = val;
}
patcher (Patcher, get)
js オブジェクトを含むパッチャーにアクセスします。このオブジェクトに関する詳細な情報は、後述の「Patcher オブジェクト」セクションを参照して下さい。
outlets (Number, get/set)
オブジェクトが持つアウトレットの数。outlets プロパティが効力を持つためには、グローバルコードでセットされなければなりません。セットされない場合、アウトレットを1つ持ったオブジェクトが作られます。
jsthis メソッド
jsthis オブジェクトの重要なメソッドは、outlet() および post() です。ここに挙げたそれ以外のメソッドは、通常、より高度なアプリケーションのためのものです。
arrayfromargs (message, argument list)
可変数のアーギュメントを取る関数を書くためのユーティリティです。そして、これらは(anythinng 関数のように)様々なメッセージを使って呼び出されることが可能です。Function オブジェクトは、配列のように数値でインデックス付けをされた
arguments プロパティを持っていますが、これは Array のインスタンスではありません。このことは、
arguments プロパティにおいて sort() のような Array 関数を呼び出したり、
arguments プロパティを値のリストとしてアウトレットから送信することができないということを意味します。
arryfromargs() メソッドは
arguments プロパティを Array に変換します。配列の0番目の要素となるメッセージはオプションです。このメッセージの使用は、anything 関数で一般的な、シンボルで始まるリストのようなものとしてメッセージを処理する場合に役に立ちます。次は、アーギュメントのソートを可能にするような関数の例です。
messagename が jsthis オブジェクトのプロパティで、これが関数を呼び出したメッセージの名前を返すということを覚えておいて下さい。
function anything()
{
var a = arrayfromargs(messagename,arguments);
a.sort();
outlet(0,a);
}
assist (any arguments)
js オブジェクトボックスのインレットとアウトレットに設定するパッチャーアシスト文字列をセットします。これは、setinletassist() または、setoutletassist() メソッド(後述の setoutletassist() の下にある例を参照して下さい)へのアーギュメントとして指定されたアシスタンス関数から呼び出されるようになっています。
declareattribute ( attributename, gettername, settername, embed )
アトリビュートを宣言します。このアトリビュートはセット、問い合わせができ、オブションでパッチャーファイルに保存することができます。アトリビュート名とアーギュメントが必要ですが、それに続くアーギュメントはオプションです。ゲッター、またはセッターメソッドが指定されない場合、デフォルトのものが用いられます。これらのアトリビュートは、pattr によっても参照されます。下記はいくつかの使用例です。
// デフォルトのゲッター/セッター
var foo=2;
declareattribute("foo"); //シンプルな例
// デフォルトのゲッター/セッター、保存時に埋め込む
declareattribute("foo",null,null,1);
// 明示的なゲッター/セッター
declareattribute("foo","getfoo","setfoo");
function setfoo(v)
{
foo = v;
}
function getfoo()
{
return foo;
}
function bang()
{
outlet(0,foo);
}
embedmessage (文字列 method_name, any arguments)
enbedmessage メソッドは、
save() 関数の中でのみ動作します。スクリプトを含んでいる
js オブジェクトが再生成されたときに呼び出して欲しい関数の名前を指定するためにこれを使います。関数名は文字列で与えられなければなりません。その後に関数に渡したいアーギュメントを続けます。これらのアーギュメントは通常、数値、配列、または文字列(このコンテキストでは、Javascript のオブジェクトを使うことはできません)になり、オブジェクトのカレント(現時点)のステートを反映します。
embedmessage メソッドは、オブジェクトのステートを復元するために呼び出すために複数の関数を指定したい場合、その数だけ使うことが可能です。次の例では、呼び出される
numchairs()、
numtables()、
roomname() がすでに定義されていると仮定され、
save 関数の中で、それぞれ別の
embedmessage 文で使われています。
function save()
{
embedmessage("numchairs",20);
embedmessage("numtables",2);
embedmessage("roomname","diningroom");
}
このスクリプトを含む
js オブジェクトが再生成されると、関数
numchairs がアーギュメント
20 と共に呼び出され、続いて
numtables 関数がアーギュメント
2 と共に呼び出されます。最後に、
roomname 関数が文字列のアーギュメント
diningroom と共に呼び出されます。
notifyclients()
オブジェクトのカレントの値が変更された場合に、任意のクライアント( pattr ファミリオブジェクト のようなもの)に通知を行ないます。クライアントは、その後、js インスタンスにメッセージ getvalueof を送って getvalueof() メソッドを呼び出す(定義されている場合−詳しくは前述の「特別な関数名」というセクションを参照して下さい)などの適切な動作を行ないます。notifyclients() メソッドは、setvalueof() および getvalueof() 関数を定義しているオブジェクトにとって、pattr との互換のために役に立ちます。
outlet (outlet_number, any arguments)
最初のアーギュメントの後に続くデータを、アウトレットナンバによって指定されたアウトレットから出力します。最も左のアウトレットが 0 になります。アウトレットナンバが実際のアウトレットの数より大きい場合、出力は行なわれません。
例:
outlet(0,"bang"); // 左アウトレットから bang を出力します。
outlet(1,4,5,6); // 左から2番目のアウトレットから、4 5 6 というリストを
// 出力します。
outlet() へのアーギュメントが、Javascript オブジェクトの場合、Max メッセージ
jsobject <jsvalue> として渡されます。これは、オブジェクトのアドレスです。
jsobject の後に数値を続けたものが
js オブジェクトに送られると、数値が有効な Javascript オブジェクトのアドレスを指定しているかどうかを確認するために、解析され、チェックされます。有効ならば、
jsobject という語は消え、関数は Javascript オブジェクトの参照だけを見るようになります。
outlet へのアーギュメントが配列の場合、配列は(1次レベルにだけ)展開され、(配列の最初の要素が数値か文字列かによって)Max メッセージ、またはリストとして渡されます。
setinletassist (inlet_number, object)
数値、文字列、または関数を、ナンバーで指定されたインレット(左インレットを 0 として数えます)と結び付けます。インレットナンバとして -1 が渡された場合、オブジェクトのアーギュメントは全てのインレットで使用されます。パッチャーウィンドウの中で任意のアシスタンス・テキストを作るために、アシスタンス関数は 上記のように、assist() メソッドを呼び出す必要があります。後述の setoutletassist() の例を参照して下さい。setinletassist() および setoutletassist() 関数はグローバルコードで呼び出されることがベストですが、任意の時点で呼び出すことができます。アシスタンス関数や文字列を、動的に置き換えることも可能です。
setoutletassist (number, object)
数値、文字列、または関数をナンバーで指定されたアウトレット(左アウトレットを 0 として数えます)と結び付けます。アウトレットナンバとして 0 が渡された場合、オブジェクトのアーギュメントは全てのアウトレットで使用されます。パッチャーの中で任意のアシスタンスを作るためには、アシスタンス関数は上記の
assist() メソッドを呼び出す必要があります。
例:
// アシスタンス 関数
function describe_it(num)
{
assist("this is outlet number",num);
}
// セットアップするグローバルコード
setoutletassist(-1,describe_it);