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/10 20:34:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:wizemperor No.1

回答回数379ベストアンサー獲得回数52

ポイント100pt

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

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

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

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

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

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

id:Lhankor_Mhy

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

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

有難うございます。

 

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

2008/03/09 09:18:52

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

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

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

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

回答リクエストを送信したユーザーはいません