第81回
概要
関数でオブジェクトを表現しようという、そういうことです。
コード
1:var Man=function(s,a){ 2: var Name=s, 3: Age=a, 4: Gender=Math.round(Math.random())?'f':'m', 5: Intro=function(){ 6: if(Gender=='f') 7: alert('私は'+Name+'。\n自称'+Age+'歳です。') 8: else if(Gender=='m') 9: alert('私は'+Name+'です。\n'+Age+'歳だったと思う。') 10: } 11: return function(s){ 12: switch(s){ 13: case 'Name' :return Name; break 14: case 'Age' :return Age; break 15: case 'Intro' :return Intro();break 16: } 17: } 18:}, 19:Main=function(){ 20: var sakata=Man('sakata',9) 21: alert(sakata('Age')+'歳の人間'+sakata('Name')+'を生成しました') 22: sakata('Intro') 23:}
解説
2-10行目がプロパティおよびメソッドの定義で、
11-17行目がオブジェクトの使い方の定義(何それ)です。
このコードでは、Manの「使い方」の中にGenderを参照する方法が無いので、
Main函数の中でsakataのGenderを参照することが出来ません。
また、ここが重要なのですが、sakataの各プロパティが一切変更できないようになっています。
これは、Manの「使い方」でプロパティの変更の方法を用意してないからです。
解説2
「使い方」についてなのですが、
このようにして定義されたオブジェクト(上のコードではsakata)を扱うときは、
それ自身を参照するときを除き、それに引数を渡して使います(上のコードではsakata('Intro')など)。
こうすることにより、自身とその子(今回は無いけど)のみがプロパティを変更出来るオブジェクトが
定義できるようになるわけです。
余談
クロージャとか、静的オブジェクトとか、そういう専門用語の意味を知らないので、
使えないのです。我流がゆえの「共通の言葉が無い」という、そんなお話。
実験室 ホーム