prototype.jsとJSANの親密な関係?

最近、はてなのnaoyaさんのblogで知ったprototype.jsを試しています。
prototype.jsJavaScriptオブジェクト指向なコーディングをしたい場合におすすめです。

以下のコードは2次元の点を表現するクラスの例です。
これまでにJavaPHPでOOなコードを書いたことのある方なら、やろうとしていることは容易に想像できると思います。
prototype.jsを使えば、こんなに綺麗にコードが書けるのですね。

<script src="prototype.js" type="text/javascript"></script>
<script>

var Point = Class.create();
Point.prototype = {
	initialize : function(x, y) {
		this.x = x;
		this.y = y;
	},
	distance : function(p) {
		return Math.sqrt(
			(this.x - p.x) * (this.x - p.x) + 
			(this.y - p.y) * (this.y - p.y)
		);
	},
	toString : function() {
		return "Point(" + this.x + ", " + this.y + ")";
	}
}

var p1 = new Point(0, 10);
var p2 = new Point(10, 0);

alert("p1.distance(p2) = " + p1.distance(p2));

</script>

そうそう、naoyaさんのはてなブックマークで知ったのですが、Using prototype.js v1.3.にかなり細かくprototype.jsの解説が書かれています。

それはさておき、prototype.jsを眺めていたら、どこかで見たことのあるコードに出会いました。よく見ると、JSANに登録されているTryと全く同じコードでした。

TryのAuthorの項目を見ると,

Rob Kinyon (rob.kinyon@iinteractive.com)

Originally written by Sam Stephenson (sam@conio.net)

と書かれています。

一方、prototype.jsのヘッダーには以下のように書かれています。

/* Prototype JavaScript framework, version 1.4.0_pre2
* (c) 2005 Sam Stephenson

どうなってるんだろう?と思い、Rob Kinyonさんがリリースしているモジュールを表示してみました。

そうすると、興味深いモジュールが見つかりました。
そう、「Prototype」です。

PrototypeのDESCRIPTIONを見ると以下のように書かれていました。

This is a faithful reconstruction of Sam Stephenson's prototype.js - please see that documentation for more detail. The main difference is that it now uses JSAN distributions vs. being a (completely) monolithic entity.

要するに、JSAN版のprototypeということですね。

    • -

CPANJavascript版であるJSANが盛り上がっていけば良いですねぇ。
JSANが活発になれば、かなり面白いことになりそうな予感がします。