window.onload = function(){
assert(true,"onload!!!");
};
var ninja = {
seoi:function seoinage(){ assert(true,"ninja 背負い投げ!"); },
ohsoto:function (){ assert(true,"ninja 大外刈り!"); }
};
ninja.出足払い = function(){ assert(true,"ninja 出足払い!"); };
ninja.出足払い();
ninja.seoi();
ninja.ohsoto();
assert(true,ninja.seoi.name);
assert(true,ninja.ohsoto.name);
assert(true,"------------END------------");
まぁこんな感じなわけですが。。
6行目7行目はそれぞれninjaObjectのプロパティとして関数を設定していますが、
前者は名前付き、後者は無名関数です。
それは、nameプロパティを表示させた結果(4)(5)を見ればわかるとおりです。
ただし、この【seoinage】という名前の関数、nameプロパティとして参照する外の用途
があるのかといわれれば、、ほとんどない。
なぜなら、関数の中からしか、この名前は参照できないからだ。
よって、再帰的に使う時には、その用途がある程度の話である。
(-_-;)
あと、現実的に使うかどうか別にして、
9、10行目と(1)の表示を見ればわかるとおり、日本語もOKっすね。
ということで、無名関数のサンプルで、こんなノリのやつが本にはかかれていたわけですが、
var ninja = {
chop:function (n){
return (n>1)? ninja.chop(n-1) + "-chop" : "chop";
}
};
assert(true,ninja.chop(4));
しかし、、まぁよくないサンプルとしてはいいのですが、、プログラム的には、あまりに美しくないわけです。
せっかく【ninja】というobjectを定義(生成?)しておきながら、
そのプロパティとしての関数の中で、また【ninja】を参照するという。。。
本では、色々な使い方の中でよくない理由を述べてるのはいいのですが、、
いや、これ、それ以前の問題!くらいの認識を持たないとダメだよね。。
で、結論としてはもちろん、
var ninja = {
chop:function chopper(n){
return (n>1)? chopper(n-1) + "-chopper" : "chopper";
}
};
assert(true,ninja.chop(4));
そう、こういう風に関数に名前をつけましょうという話でした。
もちろん、arguments.calleeという話題も無いわけじゃないが、それはそれで。(o^^o)
0 件のコメント:
コメントを投稿