method要素

JavaScriptのメソッド関連を扱う要素です。

この要素はメソッドの宣言、イベントハンドラとして使用できるようで、
色々と試してみました。

注目した観点はJavaScriptを知っているならmethod要素が
JavaScriptになった場合の概念を見てみます。
間違っていた場合、誰かコメントください。

メソッドの宣言

<method name="methodTest">
	<![CDATA[
		Debug.write("methodTest()");
	]]>
</method>

上記の宣言はJavaScriptになった場合、以下のようになります。

function methodTest(){
	Debug.write("methodTest()");
}

のようになります。

メソッドの宣言(パラメタあり)

<method name="methodTestArgs" args="arg1,arg2">
	<![CDATA[
		Debug.write("methodTestArgs("+arg1+","+arg2+")");
	]]>
</method>

上記の宣言はJavaScriptになった場合、以下のようになります。

function methodTestArgs(arg1,arg2){
	Debug.write("methodTestArgs("+arg1+","+arg2+")");
}

のようになります。

イベントハンドラ

event属性は、インスタンスに振る舞い(メソッド)を記述できます。

<method event="onclick">
	<![CDATA[
		Debug.write("onclick()");
	]]>
</method>

上記の宣言はJavaScriptになった場合、以下のようになります。

this.onclick=function(){
	Debug.write("onclick()");
}

イベントハンドラ(パラメタあり)

<method event="onclick" args="arg1,arg2">
	<![CDATA[
		Debug.write("onclick("+arg1+","+arg2+")");
	]]>
</method>

上記の宣言はJavaScriptになった場合、以下のようになります。

this.onclick=function(arg1, arg2){
	Debug.write("onclick("+arg1+","+arg2+")");
}

reference属性

referenceの用途が分からん。
説明には下記の内容があるけど、訳さないと分からないので、直訳だけど訳してみた。

If this attribute is present, it is a JavaScript expression that evaluates to an object.
The code in this method executes when this object sends the event named by the event attribute.
This attribute may be present only if the event attribute is present too.

この属性が存在する場合、それはオブジェクトに評価するJavaScript表記です。
このオブジェクトがevent属性によってeventに指定させられる場合、このメソッドのコードは実行します。
event属性がまた存在する場合のみ、この属性は存在するかもしれません。

訳してみたが、やっぱり用途が曖昧だ。
ん〜、何に使うんだろう・・・

幾つかテストスクリプトを作成して感想をまとめてみた。

  • event属性が指定された場合のみ、reference属性を使用します。(必須ではありません)
  • reference属性はJavaScript表記で記述します。onclick属性とかと一緒です。
  • reference属性のJavaScript表記が評価されるタイミングはオブジェクトが評価されたとき。

どうやら、メソッドを実行する前の初期化処理とかを記述できそう。
タイミングはインスタンスが出来たときっぽい。

下記はテストスクリプトです。

<?xml version="1.0" encoding="UTF-8" ?>
<canvas width="500" height="500" bgcolor="0xCCCCCC" debug="true">
	<class name="TestButton" extends="button">
		<method name="refTest">
			<![CDATA[
				Debug.write("TestButton.refTest()");
			]]>
		</method>
		<method event="onmouseover" reference="this.refTest()" >
			<![CDATA[
				Debug.write("TestButton.onmouseover");
			]]>
		</method>
	</class>
	<debug x="100" y="25" />
	<TestButton>
		<method event="onclick" reference="this.refTest()" >
			<![CDATA[
				Debug.write("TestButton.onclick");
				
			]]>
		</method>
	</TestButton>
</canvas>

上記を実行しブラウザで確認したところ、下記の結果が。

 TestButton.refTest()
 TestButton.refTest()

ついでに、ボタンにカーソルを当ててクリックした場合の結果。

 TestButton.refTest()
 TestButton.refTest()
 TestButton.onmouseover
 TestButton.onclick