[JavaScript] prototype.js と for(i in hoge)... でハマった件

Posted by
ぴろり
Posted at
2009/02/16 13:03
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ

 mixi がリニューアルして mixCipher が動かなくなっていたのですが、その原因について簡単にメモしておきます。要は mixi が新しく prototype.js を使うように変更されていたために、既存ライブラリでの配列の処理で動作が変わってしまっていたのが原因でした。

このエントリーをはてなブックマークに追加  

 以下のコードを実行すると、配列 a の添字が 3 つ表示されます。これは期待通りの動作です。

<script type="text/javascript">
var a = [ 10, 20, 30 ];
for (i in a)
	alert (i);
</script>

 ここで、prototype.js を読み込んでから、同じコードを実行すると、Array.prototype が拡張されてしまっているために、それら拡張されたメソッド名までが表示されるようになります。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script type="text/javascript">
var a = [ 10, 20, 30 ];
for (i in a)
	alert (i);
</script>

 以下のようにしないと最初と同じ動作になりません。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
<script type="text/javascript">
var a = [ 10, 20, 30 ];
for (i=0; i<a.length; i++)
	alert (i);
</script>

 今回はデバッガで案外と簡単に原因が特定できたのですが、これが複数ファイルに渡る巨大ライブラリだったりすると、追跡が嫌になりますね。

このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。