prototypeの使いどころ
最近、ブラウザ内に(擬似)Windowを表示するプログラムをいじってるんだけど、今日ちょっとした気付きがあったのでここに書いてみる。
JavaScriptのprototypeって、prototypeチェーンだとかで、JavaScriptという言語の根幹部分だという認識が強い。クラスベースオブジェクト指向でないJavaScriptをあたかもクラスベース言語のように使えるように、Prototype.jsやdojoなどのJSライブラリは色々な工夫をしているけど、prototypeは必ずその根幹として使われる。
JavaScriptを少し学んでprototypeについて多少の知識は準備したとはいえ、これまでJava専門だった私の場合、やはりprototypeって「クラスの代わり?」程度の認識しか持てていなかった。が、今日、違うprototypeの使いどころを認識できたというわけだ。
たぶん、これってprototypeの使い方として本来基本のものなんだろうなと思うが、
今日私が気付けたのはデフォルト値を与えるものとしてのprototypeの使い方。
たとえば以下のようなイメージのWindowクラスがあったとしよう。開くwindowをカスタマイズする各種属性をoptionという属性で指定するイメージだ。
var option = { width : 500, resizable : true, modal : false } var win = new hoge.HogeWindow(option);
hoge.HogeWindow = function(option){ this.attr = {} for (var key in option) this.attr[key] = option[key]; }
attrでwidthは500pxと指定しているが、heightは特に指定していない。HogeWindowを使いやすいものとするには、このように指定が特にないときは、デフォルト値(例えば300px)が指定された形でWindowには開いてもらいたい。
こういうとき例えば、hoge.HogeWindowの中が以下のように実装してあれば、hoge.HogeWindow.option.heightとしてデフォルト値300が用いられる。
hoge.HogeWindow = function(option){ this.attr = {} this.attr.prototype = { width : 400, height : 300, minWidth : 1200, minHeight : 900, resizable : true, modal : false, ... ... }; for (var key in option) this.attr[key] = option[key]; }
このように、「デフォルト値を与えるもの」の実装としてprototype使うのってとってもハマるんだなぁと気付いたということです。
いや、そんなの当たり前じゃんっていう話なのかもしれないけど、個人的には気付きだったので、ここに書く次第です^^あはは