JavaScript再入門
第2次ブラウザ戦争以前、不完全に習得していたJavaScript。
今回、HTMLになるべく手を入れずにWeb画面の見栄えや振る舞いを変える必要があったため、最近のテクニックなどをちょっと調べました。
まだprototype.jsとかjQueryとか、じっくり見たことはありません。あ、jQueryは本を読んでますね。けどよく覚えていません。無意識に覚えている可能性はあります。
いくつかの解説サイトを渡り歩きましたが、自分の中で元の情報と併せて整理し直して、それを元にサンプルを書いてみました。
今回は、WSHを使ってコマンドラインで実行しています。
// main.js function echo(message) { WScript.Echo(message) } function defineClass(def) { var ctor = def[""]; ctor.prototype = def; /* delete def[""]; */ return ctor } var A = defineClass({ "": function(name) { this.name = name; return this; }, invoke: function() { echo("A.invoke, name=" + this.name) } }); var a = new A("aaa"); var b = new A("bbb"); b.invoke = function() { echo("--- b.invoke, name=" + this.name) }; a.invoke(); b.invoke(); delete b.invoke; a.invoke(); b.invoke(); var c = a[""]("ccc"); c.invoke();
頭のところで2つ関数を定義しています。
ひとつは、標準出力をラップするecho関数。これは、WSH固有の"WScript.Echo"を括り出しています。
もうひとつは、クラスをクラスベースっぽく(?)宣言できるようにする関数。空文字のメソッドは、コンストラクタにしてます。わざとメンバに残しているので、普通にメソッドで呼び出せてしまっています。
実行は、Cygwinで以下のようにしました。WSHのロゴが出力されないようにしています。
$ alias js="cscript //Nologo" $ js main.js A.invoke, name=aaa --- b.invoke, name=bbb A.invoke, name=aaa A.invoke, name=bbb A.invoke, name=ccc $