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 件のコメント:
コメントを投稿