Object.prototype.foo = function () {alert(this);}
document.foo(); //=> [object HTMLDocument]
alert(document.documentElement.childNodes); //=> [object NodeList]
document.documentElement.childNodes.foo(); //=> Error: (snip).childNodes.foo is not a function.

なんでだろう? うーん全部のオブジェクトは Object オブジェクトの仲間(?)なんだよねぇ。 いや、なんで Object.prototype に設定すると他のオブジェクトから呼べるかよくわからないんだけど……プロトタイプ辿ったら Object.prototype にいきつくのかなぁと思いきや document.prototypeundefined だし……

Opera だと [object NodeList] が表示される。Gecko のバグなのかな。

あ、インスタンス化(?)されてるから document.prototype じゃなくて document.constructor.prototype か。それならわかる。いやいやわかんないけど。なんかイメージできない。prototype もオブジェクトであるからコンストラクタがあるはずで、さらには参照している prototype があるかもしれない的? document.constructor.prototype.constructor[object Object] だからたぶんそれであっているはず……

あぁ。インスタンスってのはやっぱクラスベースに使う用語なんだ……インスタンスとか言い出すと全部インスタンスだよなぁ……

  1. トップ
  2. prog
  3. Object.prototype

Bookmarks Synchronizer で Links ページを半自動的に作ってみるテスツ。ただファイルサイズがでかすぎ (現時点で元の XML ファイルが 115kb) でそれを PHP で動的に変換してるからさぁ大変。

負荷ポインツが増えないことを祈りつつ……それとクライアントサイドスクリプト使っているから(昨日のやつはこれだ!)なんか大変だったら教えてください。

サイズでかくなりすぎたら favicon を同期とるのやめよう。埋め込み……

  1. トップ
  2. soft
  3. Links の微自動化
  1. トップ
  2. web
  3. Links の微自動化

ins, del, blockquote の属性の表示を DOM で行うようにしてみた。でもインライン ins, del には対応してなかったりする……CSS とどっちがいいだろう。スクリプトきっていたら表示されないし、ins や del は CSS でやっても IE 以外は困らないと思うけど、blockquote の cite はいちいちソース開いたりプロパティ開いたりするのが面倒だから DOM で生成したほうが有用に働くんじゃないかなぁと。

ins, del はやっぱ CSS にしとこうかな……インラインに対応するのめんどくさ。

  1. トップ
  2. web
  3. Script? CSS?

ECMAScript におけるオブジェクトは連想配列 (obj.propertyX == obj["propertyX"]) ってのは分かっていたつもりだったのに Object Initializer Object Initialiser って何だよとか思ってた。よく FF の拡張なんかで見る foobar : function () {} だけど、ちゃんと考えれば連想配列のモンスターバージョンの一部だった……形が変わって完全混乱ですよ。あぁ……

// 普通に見える連想配列
obj = { "key" : "val", "key2" : "val2" };
// 不思議定義に見える連想配列
obj = {
propertyX : "",
foo : function () {
// do foothing
},
bar : function () {
// do barthing
}
};

キーにダブルクオーテーションはあってもなくてもいいらしい。Identifier が指定されたときは StringLiteral に勝手に変換される。そんなわけでオブジェクトのメンバのリストを取得するのと連想配列を順番に取得するのに同じ for ( - in - ) が使えると……

  1. トップ
  2. self
  3. 理解力のなさ。
  1. トップ
  2. prog
  3. 理解力のなさ。

階段・歌・女の子一人と男一人・鼻づまり・点媚薬・食事・アイス

  1. トップ
  2. life

now playing に Top Artists 表示してみる。データは Audioscrobbler からひっぱってくる。データの更新は今のところ手動。そんなに更新されないし。一日に一回 cron で動かしてもいいかもしれない。

Top Tracks も表示してみる。ごちゃごちゃしてきた。いらんかもしれない。

ちなみに何故か統計情報を XML やらテキストデータやらで取得できないので普通に正規表現で抜いてくることにしてみた。

  1. トップ
  2. web
  3. Audioscrobbler Top Artists
  1. トップ
  2. music
  3. Audioscrobbler Top Artists
  1. トップ
  2. prog
  3. Audioscrobbler Top Artists

イテレータってのは Ruby の [1, 2, 3].each {|item| puts item } ですけど、ふと思いついたので ECMAScript (Javascript) でイテレータっぽいもの作ってみる。関数もオブジェクトも同じ(() つければ実行できる)らしいので(prototype 型 OOP とかむしろ OOP とかわかんねぇんですが)関数を引数に渡せばいいわけで(ry

function Array_each(func) {
for (var i = 0, len = this.length; i < len; i++) {
func(this[i]);
}
}
Array.prototype.each = Array_each;
[1, 2, 3, 4].each(function (i) {
alert(i);
});

はいはい。誰でもわかりますね。「なんだデキンジャン!」とか喜んだ俺はバカですね。くそ。まぁ美しくはないですけども……

  1. トップ
  2. prog
  3. ECMAScript でイテレータ

IE で script 要素を書くと全くレンダリングされないのだけれど、どうしてだろう? もちろん Gecko と Opera なら大丈夫だし、script 要素を消せば表示される。ためしに XML 宣言, html, head, script, body, h1 要素だけで試したけど表示されなかった。謎すぎ……

ってあー。書く前に散々悩んだのに書いてから気付いた。script 要素の閉じタグがないとだめなんだ……あぁもう

  1. トップ
  2. web
  3. script on IE
  1. トップ
  2. soft
  3. script on IE

また前触れなく完全にハングした。今回は画面の切り替えとかじゃなかった気がする。ただたんに画面の切り替えのときに起こりやすいだけかもしれない。スキャンディスクしてみた(させられた)けどエラーなし。誰かたすけt

  1. トップ
  2. soft
  3. またハング

Gecko の getElementsByTagName がおかしいなぁ。document.getElementsByTagName("*") の結果が少ない。具体的には body とその中身が入ってない。html, html/head, html/head/* だけ。おかしい。

そもそも document.documentElement.childNodes に body が含まれていない。DOM 上から抹消されとる。

わかった! document.documentElement.childNodes が実行される時点では DOM に body 以下が読み込まれていないんだ。

はぁ…… Opera は Event.srcElement 持ってるくせして中身がないっぽい。よう知らんけど fromElement がメンバにあるか (in) 調べればいいらしい……クライアントサイドなんて……

  1. トップ
  2. prog
  3. getElementsByTagName on Gecko