前回setTimeoutでthisが動かないーなこと書きましたが
forEachとsomeまで動かないことが判明・・・

対策がsetTimeoutよりは楽だったけど書き直しがめんどくさい

setTImeout同様関数を渡して実行させる場合、実行する場所がグローバルになるのでまたもthisが別のところを指してることになってました
func.prototype = {
a : 10,
f : function(){
array = [1,2,3];
var x = 1;
array.some(function(e){this.a = 100;}); // this.aがないよってエラー
}
} ;
対策は、someやforEachのに渡す関数はsomeやforaEachがある場所のローカル変数にアクセスできるということを使ってthisを使ってアクセスしたいものをローカル変数にコピーしておきます
(array.some(function(e){console.log(x);}); は1って表示されます)
someやforEachが終わったあとででローカル変数に入れておいたのをthisの要素にコピーすればOKです
配列の場合は参照なのでコピーする必要はないです

func.prototype = {
a : 10,
ar : [1,2],
f : function(){
array = [1,2,3];
var x = this.a;
var xr = this.ar; 
array.some(function(e){x += 100; xr[1]+=100;});
this.a = x; // これないとthis.aは変更されない
// this.ar = xr; // arは配列なのでいらない 
}
} ;
**追記
someやforEachで渡した関数内でthisを使う関数を実行するときにまた問題が出たので修正版
func.prototype = {
a : 10,
ar : [1,2],
func: function(arg){console.log(arg);},
f : function(){
array = [1,2,3];
var _this = this;
array.some(function(e){
_this.a += 100;
_this.ar[1]+=100;
_this.func.call(_this,"abc");
});
}
} ;
_thisでthis自体を受け取ってるので後でthis.aを書き換える必要がなく、
関数を呼ぶときもcallを使って_thisを渡しているのでちゃんと動きます

--
前回のsetTimeoutを少し改良して使いやすくしたものをjsファイルにしましたー
http://blog.livedoor.jp/netomemo/js/setTimeoutThis.js
<script src="setTimeoutThis.js"></script>な感じで読み込んで
setTImeoutでthisを使うクラスのメソッドとしてsetTimeout = setTimeoutThis;を書いておけばOKです
できる限り元と同じ使い方をできるようにしてみました