Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

Hatena Rolling を update した

機能もコードも非常にショボくてだめだめな感じの拙作 greasemonkey スクリプトの Hatena Rolling ですが、自分的には非常に便利で、愛用していたりします。先日、サーバが死んだことにともない、そのスクリプトも消え失せてしまってたかと思いきや、Userscripts.org: Hatena Rolling に残っているのを発見し、ちと安堵したりもしました。

さて、その間にもみんな大好きはてなさんは次々と新しいサービスをリリースしまくりで、Hatena Rolling を新サービスに対応しる! との声も聞かれたり聞かれなかったりしたので、10 文字ぐらい追加すればオケなはずってんでやってみると、あれ、うまくいかないなぁ……という事態に。

そのうまくいかなかったところってのは、はてなマップのユーザごとのページでのリンクボックス表示(僕とこだとはてなマップ - antipopの地図)。元々は for (var i in obj) { ... } としてまわしていたのですが、はてなマップprototype.js を利用している関係で、prototype.js が Object を拡張しちゃってて、単にそゆふうにまわすだけではうまくいかないわけです。困りました。

そこで、ニート言語の使い手に泣きついたら、さくっと解決してくれました。さすが過ぎ。要は、「最速インターフェース研究会 :: prototype.jsのObject汚染を回避する方法」で述べられている通り、あるオブジェクトが持つプロパティが、元々そのオブジェクトが持っていたものなのか、あるいは prototype.js がやるように、あとから拡張されたものなのかを、hasOwnProperty メソッドで判別してやればいい、と。たとえば、以下のような感じ。

for (var i in obj) {
    // もともと持っているプロパティかどうか調べ、
    // 後付されたものならスキップ
    if(!obj.hasOwnProperty(i)) continue;

    // 以下、通常の処理
    ...
}

とまぁ、そんなこんなで、Hatena Rolling を update しましたよ、というお話でした。