高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

クラスを作る

 さて、上の課題で、JavaScriptにて自作クラスを作るということをやってみました。はじめはほかのサイトを参考にしたものをただコピーして使おうと思っていたのですが、それでは面倒(どっちが面倒なんだか)と、XLayerクラスとして分割。
 JavaScriptのクラス宣言ってのは、結構おもしろい書き方をします。

function XLayer(document, name){
  ・・・
}

XLayer.isSupported = function(){
  ・・・
}

XLayer.prototype.getLayer = function(){ return this.layer; }

まず一番上、コンストラクタをfunctionとすることで、突然クラス宣言が始まります。
以後、(クラス名).prototype.(関数名)とやって、メンバ宣言をします。
あ、prototypeが抜けると、スタティックメソッド扱いになるようです。(上のisSupportedみたいな)
なお、アクセシビリティ指定はなし。すべて(変数もメソッドも)強制的にパブリックです。継承はありません(無理にやろうとすればできなくはないようですが、手間がかかります)。もしかしたら、XLayer.prototype.const = 2; なんてやると、読み取り専用メンバが作れるのかもしれませんが、それは未確認。
あと、メンバの中でほかのメンバを呼び出したいとき、

XLayer.prototype.getPosition = function(){
  if(document.layers) // NN4
    return new Point(getLayer().left, getLayer().top);
  else // IE, (Mozilla), Opera
    return new Point(
        getLayer().offsetLeft || getLayerStyle().pixelLeft || 0, 
        getLayer().offsetTop  || getLayerStyle().pixelTop  || 0
      );
}

 なんてしたくなりますが、thisは省略してはいけないようです。あと、JAVAやCなんかと同じく、引数はなくても()は省略不可です(というか、省略していいの、VBDelphiくらいなものかも)、これは省略してもエラーにならない(でも予期しないデータが入る)ので、気をつけてください。


 さて、まず、クラス宣言を囲む括弧も何もないというところが、今までみた言語と違います。そのへんPerlなんかと若干にていたと思いますが、シンプルすぎるほどシンプルですね、それでいて、JavaScriptの特性が表れてるというか。
でも、スクリプト言語として、手早くささっとオブジェクトを作るには、とりあえず必要なものがそろってる…といえるでしょう(まあ、アクセス指定とか、ほしいものもありますけどね)か。


 でも、デバッガがないのには参った…(^^;)IEのエラー表示もあんまり当てにならないし(xBrowser.js内のエラーなのに、Sample.htmでエラーなんて表示するんですもの)、エラーの原因を見つけるのだけでかなり時間を費やしてしまいました。皆さんもJavaScriptを使うときは、その辺気をつけてくださいね。