prototypeの使いどころ

最近、ブラウザ内に(擬似)Windowを表示するプログラムをいじってるんだけど、今日ちょっとした気付きがあったのでここに書いてみる。

JavaScriptのprototypeって、prototypeチェーンだとかで、JavaScriptという言語の根幹部分だという認識が強い。クラスベースオブジェクト指向でないJavaScriptをあたかもクラスベース言語のように使えるように、Prototype.jsdojoなどの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使うのってとってもハマるんだなぁと気付いたということです。


いや、そんなの当たり前じゃんっていう話なのかもしれないけど、個人的には気付きだったので、ここに書く次第です^^あはは