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