仕事で前々からprototype.jsは、ちょこちょこ使っていたが、Ajax.updaterとか、Ajax.request, $()関数等々部分的にしか利用していなかった。
こないだ、公開されている某ライブラリを少し手直ししようとおもったら、prototype.jsを使った形でクラスが作られていたので多少読むのに苦労したので、これを踏まえて。。。。
少し、自分で書いてみた。基本に返る。誰が何と言おうと車クラスから始めて見る。
インスタンス名は趣味です。
prototype.jsにはClassオブジェクトが定義されている。
クラス宣言をこのオブジェクトから行うと、コンストラクタとして振る舞うinitializeメソッドが定義される。
var Car = Class.create(); Car.prototype = { name: '', oil: 0, initialize : function(name, init_oil){ this.name = name; this.oil = init_oil; }, showOil : function(){ alert(this.oil); }, chargeOil : function(addOil){ this.oil += addOil; }, }; var celica = new Car("celica", 50); celica.showOil(); // dialog displayed for '50' celica.chargeOil(50); celica.showOil(); // dialog displayed for '100'
うむ、なるほど。
で、JavaScriptではオブジェクトに対してメソッドを代入式で表すことができるので上のソースコードに下の様なソースを足すとメソッドを追加できる。(普通はやらないと思うが…)
celica.showCarName = function () { alert(this.name); }; celica.showCarName(); // dialog displayed for 'celica'
この名前の無い関数function(){} を無名関数という。らしい。
確かにこうやって書いて行くと綺麗にソースコードがかけそうだ。