2008年2月アーカイブ

shark.jpg
MoE を久しぶりにやりました。釣りスキルに手が加わって釣果が分かるようになっています。ルーレットに失敗して足元に落ちるエサ(*1)を見ながら、昔遊んだ川のぬし釣りを思い出していました(*2)。釣りは和む。

*1 … 土日の夕暮れ近くにTVを付けると大間のマグロ漁師を追ったドキュメンタリ番組がやっているぐらいの確率で足元に落ちます。
*2 … クマと殴り合いながら地面のミミズを集めるゲームです。

IE だけグローバル オブジェクトのプロトタイプ オブジェクトが違うというお話です。

Object.prototype.isPrototypeOf(window);
// IE 6: false
// IE 7: false
// Firefox 2.0.0.12: true
// Opera 9.2.6: true
// Safari 3.0.4b: true

Object.prototype に毛を生やしても IE だけ影響を受けませんね。ECMA 262 3rd edition の仕様ではグローバル オブジェクトのプロトタイプ オブジェクトは実装依存だそうです。

また、window に特定のプロパティがあるかどうか知りたい場合に上記の理由で window.hasOwnProperty() とする事が出来ないので…

window.hasOwnProperty("undefined");
// IE: エラー「オブジェクトでサポートされていないプロパティまたはメソッドです。」
// Firefox 2.0.0.12: true
// Opera 9.2.6: false
// Safari 3.0.4b: true

Function#call() または Function#apply() を利用することになります。

Object.prototype.hasOwnProperty.call(window, "undefined");
// IE 6: true
// IE 7: true
// Firefox 2.0.0.12: true
// Opera 9.2.6: false
// Safari 3.0.4b: true

foreach によるイテレータのキーって数値(int型)か文字列しか使えないんですね。ショック…

// .NET Framework の Dictionary<TKey, TValue> や Java の IdentityHashMap<K, V> みたいな振る舞いをします
$dic = new Dictionary();
$dic[new stdClass()] = 1;
$dic[new stdClass()] = 2;
$dic[new stdClass()] = 3;

// Illegal type returned from KeyValuePairIterator::key() in ...
foreach ($dic as $key => $value) {}

べ、べつに foreach なんてなくたって平気なんだからね!

for ($i = $dic->getIterator(); $key = $i->key(), $value = $i->current(), $i->valid(); $i->next()) {}

このアーカイブについて

このページには、2008年2月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年1月です。

次のアーカイブは2008年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.12