グローバル変数が曲者でした。prototypeを使わずにinjectを記述してみます
<script>
Array.prototype._each = function(iterator){
for(var i=0, l=this.length; i<l; i++){
iterator(this[i]);
}
}
Array.prototype.each = function(iterator){
var index = 0;
this._each(function(value){
iterator(value, index++);
});
}
var array = ['hoge', 'moge'];
memo = 'kekka->';
array.each(function(v, k){
memo = (function(memo, v){
return memo + v;
})(memo, v, k)
})
alert(memo);
</script>
prototypeにinjectを記述して書き直してみます
<script>
Array.prototype._each = function(iterator){
for(var i=0, l=this.length; i<l; i++){
iterator(this[i]);
}
}
Array.prototype.each = function(iterator){
var index = 0;
this._each(function(value){
iterator(value, index++);
});
}
Array.prototype.inject = function(memo, iterator){
this.each(function(v, k){
memo = iterator(memo, v, k);
})
return memo;
}
var array = ['ダークナイト', 'ポニョ', '見に行きたい'];
var iterator = function(memo, v, k){
if(k == 1) return memo;
return memo + v;
}
var rs = array.inject('明日は', iterator);
alert(rs);
</script>