(続)javascriptでArrayにeach()を実装する - あおうさ@日記
ありがたいことにid:ZIGOROuさんから情報を頂いた。
Fx だと forEach, map とか揃ってますね。
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array#Iteration_methods
javascript1.6だとArrayにforEachという関数が追加されるようだ。
実装は下記でほとんど似たような実装だった。
Array.prototype.forEach = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new TypeError(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this) fun.call(thisp, this[i], i, this); } };
読んでみると下記の部分がよくわからなかった。引数があった場合はそのオブジェクトにしたいってことは
わかったのだがなぜ引数無しで動作するのかがわからない。
var thisp = arguments[1];
試しに実行してみると
function printElt(element, index, array) { alert(this); // x } [2, 5, 9].forEach(printElt, ["x"]);
だよね。
function printElt(element, index, array) { alert(this); // [object Window] } [2, 5, 9].forEach(printElt);
firefoxでやるとWindowなんだ。よくわからんけどそういう動きらしい。