JavaScriptはオブジェクト指向スクリプト言語。主にブラウザ上でDHTMLの実現、ユーザ操作の補助、Ajaxと呼ばれる手法で高度なWebアプリケーション作成に利用される。
JavaScriptの言語仕様部分。現在主要なブラウザが実装している仕様はECMAScript 3rd Editionである。次世代のブラウザには5th Editionが採用される予定。
ECMAScriptは言語仕様なので、HTML文書の操作(DHTML)の仕様は一切定められていない。DHTMLに関する共通仕様はW3CのDOMによって決められている。
ホストオブジェクト(window、navigator、location、history 等)には標準仕様がなく各ブラウザベンダが互いに様子見したり、協力しつつ実装しているようだ。ただ、XMLHttpRequestについてはHTML5で仕様化されるようだ。
Java等のオブジェクト指向はクラスベースのオブジェクト指向と呼ばれる。一方、JavaScriptはプロトタイプベース、あるいはインスタンスベースオブジェクト指向と呼ばれる。
クラスベースは、まず振る舞いとデータをクラスとして定義し、クラスを型とするインスタンスを作成する。そしてクラスで定義した操作を組み合わせてプログラミングする。プロトタイプベースでは、まずインスタンスを作成し、そのインスタンスに独自の性質を付加してプログラミングする。また別のインスタンスをプロトタイプとすることでプロトタイプとなったインスタンスの性質を引き継ぐことができる。
クラスに縛られないため、実行中の任意の場所でプロパティやメソッドをオブジェクト毎に変更したり、新しく追加したり、削除したりすることができる。これはStringやwindow等のビルトインオブジェクトも例外ではなく、同じStringのオブジェクトでもオブジェクトごとに別の振る舞いを持たせる事もできる
var a = new String("JavaScript"); var b = new String("JavaScript"); b.toString = function() { return this.valueOf() + "にゃー"; }; console.log(a.toString()); // "JavaScript" console.log(b.toString()); // "JavaScriptにゃー"
ブックマークレットはブックマークに保存するJavaScript
言語機能拡張、ウィジェット・GUIコンポーネントの提供、クロスブラウザ、Ajax処理の簡易化等の機能を提供する。
| ライブラリ | ライセンス | メモ |
|---|---|---|
| prototype.js | MIT | これに依存するライブラリが多い。 |
| script.aculo.us | MIT | prototype.jsにエフェクト等の機能を追加する拡張ライブラリ |
| Dojo Toolkit | AFL v2.1 | 全部入りの重量級ライブラリ |
| rico | Apache 2.0 | prototype.js依存 |
| Mochikit | MIT or AFL v2.1 | 軽量 |
| jQuery | MIT or GPL | prototypeを抜きトップ独走中 |
| jQuery UI | MIT or GPL | jQueryにUIコンポーネントを追加 |
| Ext JS | LGPL 3.0 | prototype.js、YUI、jQueryにコンポーネントを追加する。単体でも動作可能、重い |
| YUI | BSD | Yahoo!が作成したライブラリ |
| MooTools | MIT | 軽い |
その他
巨大ライブラリで通信負荷が気になる場合は、Gzip圧縮転送などを使う。
TinyMCEとFCKeditorの違いを比較、TinyMCEは複数の1つのインスタンスで複数のテキストエリアに対応できるので、1画面上に二つのエディタを置くとき圧倒的に速い。
jwysiwygはjQueryプラグインとして提供されるライブラリ。