dojoのdeclareしたfunctionはどこに保存されてるのか(当然!書いてる人はdojoのことなんて何もわからないぜ!)



明!あったよfunction!
<でかした!

クラス名が「Syagami」、function名が「testFunc1」だったとしたら、
Syagami._meta.hidden.testFunc1();
で実行することができるみたいです。
つまり、なぜかわからないがグローバル変数としてSyagami._meta.hiddenにfunctionが登録されるみたいなんじゃ!すまぬ!

下のhtmlはボタンを押すとdeclareで定義したtestFunc1とtestFunc2が順に実行されます。
1は_meta.hiddenを直接指定。
2はインスタンスを作って普通に呼び出し。

スーパークラスのメソッドも、全く同じ要領で呼び出すことができます。

_meta.hiddenのやつはインスタンスにヒモ付されてないふつーの関数だから、
buttonのonclickイベントから呼ばれるとthisがdocument.all("hoge")相当の物体になってしまう!

ちくしょう!よりにもよってこのおにぎりが鮭だから…

インスタンスを作って呼ぶ場合はインスタンス.メソッド()の形で呼ぶので、
thisは当然インスタンス自体になるんで小細工は不要である。

なんだかよくわかんねぇスーパークラスを使わされるときに
なんだかよくわかんねぇなりにデバッガで動かして試す時に使えなくもないような気もするそんな情報であった。

<html>
<head>
<script src="dojo/dojo.js"></script>

<script type="text/javascript">

// クラスの定義
dojo.declare(

/*クラス名*/
"Syagami",

/*スーパークラス名*/
null,

/*内容を定義*/
{

/*属性その1*/
test1:"test1",
/*属性その2*/
test2:"test2",

/*メソッドその1*/
testFunc1: function() {
// buttonのonclickから呼ぶと、thisがボタンになっちゃうからthisを避難させる。
var _this = this
alert(_this.test1);
},

/*メソッドその2*/
testFunc2: function() {
alert(this.test2);
}
}
);

// onLoadの定義
dojo.addOnLoad(
function() {
dojo.connect(dojo.byId("hoge"),"onclick",
function() {
// dojo.declareで登録したクラスの実体はグローバルにある。
Syagami._meta.hidden.testFunc1();

// コンストラクタから作ってももちろん実行可能。
new Syagami().testFunc2();
}
);
}
);
</script>
<head>

<body>
<button id="hoge">button</button>
</body>

</html>
inserted by FC2 system