var obj = this; ではない書き方ってあるの?(iOS Safari)
お仕事でsortが必要なケースがあって下記のようなコードを組みました。
そこで、タイトルの通りなのですが、var obj = this; ではない書き方ってあるのかな?と。
var Hoge = function(){};
Hoge.prototype = {
string : "hoge",
station : [
{name:"hoge",customers:736715}
,{name:"kamip",customers:544222}
,{name:"moge",customers:403277}
,{name:"kamip2",customers: 172306}
],
punch : function(){
//alert('punch!');
},
sort : function(){
//alert(this.string); // "hoge"
var obj = this;
this.station.sort(
function sst(a,b){
//alert(this.string);// undefined
//alert(obj.string); // "hoge"
var a = a["customers"];
var b = b["customers"];
if(true){
//降順
if( a < b ) return 1;
if( a > b ) return -1;
}else{
//昇順
if( a < b ) return -1;
if( a > b ) return 1;
}
return 0;
}//.bind(this) //ios safariだと効かない
);
},
};
var moge = new Hoge();
moge.sort();
[/javascript]
これはなんとなくこうやればいいんじゃね?的な感じでやったら出来ただけですが、
GoodParts本のP55ページ、関数呼び出しパターンに記載されている方法が↑でした。
また別の方法として.bind(this) を付ける方法もあったのですが、これはiOS Safariの場合bindがないよエラーだったので、なんかださいなーと思いつつ。結局よい案がなかったので書いておきます。
まだまだ勉強不足なので「こんな方法で出来るよー」とかあれば是非とも教えてください。