さて、上の課題で、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なんかと同じく、引数はなくても()は省略不可です(というか、省略していいの、VBとDelphiくらいなものかも)、これは省略してもエラーにならない(でも予期しないデータが入る)ので、気をつけてください。
さて、まず、クラス宣言を囲む括弧も何もないというところが、今までみた言語と違います。そのへんPerlなんかと若干にていたと思いますが、シンプルすぎるほどシンプルですね、それでいて、JavaScriptの特性が表れてるというか。
でも、スクリプト言語として、手早くささっとオブジェクトを作るには、とりあえず必要なものがそろってる…といえるでしょう(まあ、アクセス指定とか、ほしいものもありますけどね)か。
でも、デバッガがないのには参った…(^^;)IEのエラー表示もあんまり当てにならないし(xBrowser.js内のエラーなのに、Sample.htmでエラーなんて表示するんですもの)、エラーの原因を見つけるのだけでかなり時間を費やしてしまいました。皆さんもJavaScriptを使うときは、その辺気をつけてくださいね。