人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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));

●質問者: Lhankor_Mhy
●カテゴリ:ウェブ制作
✍キーワード:F.S F1 JavaScript OP エラー
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● wizemperor
●100ポイント

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

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

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

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

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

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

◎質問者からの返答

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

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

有難うございます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ