javascriptの質問です。

 
オブジェクトのメソッドからそのオブジェクトのメソッドを呼び出したい時に、コールバック関数を使う時などのthisが使えない場合について。
以下のような、thisを退避する書き方しか思いつかなかったのですが、もっとスマートな書き方はありますか?
 
a = new f1();
function f1(1){
 var self = this;
 this.sum = function(i){return i+1};
 this.op = function(i){
  return f2(i,function(j){
   return self.sum(j); //this.sumだとエラーになってしまう。
  })
 }
}
function f2(i,func){
 return func(i)
}
alert(a.op(1));

回答の条件
  • 1人1回まで
  • 登録:2008/03/08 19:30:10
  • 終了:2008/03/10 20:34:06

回答(1件)

id:wizemperor No.1

wizemperor回答回数379ベストアンサー獲得回数522008/03/08 21:07:59

ポイント100pt

結論からいうと、JavaScriptはそういう仕様になっているのでできないと思います。

ただし、その部分を外部に切り分けると見た目は少しだけスマートになるかもしれません。

例えば、有名なライブラリであるprototype.jsにはbindというメソッドがあります。

その実体はapplyメソッドのラッパーです。

http://d.hatena.ne.jp/higepon/20050901/1125555797

質問の例だと入れ子レベルが深いので、素直に待避するのがスマートな気はしますが…

id:Lhankor_Mhy

なるほど。applyって、そうやって使うんですね。

何に使うんだろう、とか思ってました。

有難うございます。

 

確かにこの例だと、ネストの外側で処理しないといけなさそうで、かえって(私が)混乱しそうです。コールバック関数内で使うのにも向いていないのかな? イベントにメソッドを指定するのには良さそうですね。

2008/03/09 09:18:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません