ローカルで prototype.js をいじる

WSHでDOM (Shibuya.js in Kyoto) - てっく煮ブログを見て
「そうか。こうすれば WSH では prototype.js が使えるのか」と思い
僕もローカルの SpiderMonkeyprototype.jsコンパイル*1できるようにしてみた。


でも、にとよんさんのように DOM には対応してないし、include() とかも使わずにベタ書きである。
いいんだ。とりあえず動けばいいんだ。

// おまじない
window = {};
navigator = {
  userAgent: ''
};
document = {
  createElement: function() { return { __proto__: {}, appendChild: function() {} }; },
  createTextNode: function() {}
};
HTMLElement = { prototype: {} };


// 以下に prototype.js の内容を置く
var Prototype = {
  Version: '1.5.1.1',
.
. // 省略
.


prototype.js のバージョンが「1.5.1.1」なのは
特集:prototype.jsを読み解く|gihyo.jp … 技術評論社
リーディングの対象として扱っているのがそのバージョンで
僕は今現在この記事を参考に prototype.js を読んでいるからだ。


おまじないは生の prototype.jsコンパイルして出てきてエラーを見て
適当にエラーを避けるようにオブジェクトを定義したもの。
ちなみに最初は「document を空のオブジェクトにしちゃうだけで動くかも!」と思っていたのだけど
さすがにそこまで甘くはなかった。


このおまじないはやっつけ感あふれる適当さだけど
それでも勉強に使う分にはこれでけっこう便利なのだ。
上述したように DOM 関係は全然まともに動かせないのでアレだけど
String とか Array とかの挙動はローカルで色々いじって試すことができる。

print('abc'.times(3)); // => abcabcabc
['camel-case', '-camel-case', 'camel-cASE'].each(function(str) { print(str.camelize()); });
// => camelCase
// => CamelCase
// => camelCASE


昨日書いたMozrepl で prototype.js いじる - gan2 の Ruby 勉強日記よりも
こっちの方が手軽でいい感じだ(・∀・)
2つを使い分けて、DOM 周りをいじるときは Mozrepl を使うようにしようと思う。

*1:コンパイルって言っていいのかな?