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

javascriptをOOPっぽく書いてみたのですが、プロパティにアクセスできないケースが2ケースありました。
書き方が悪いのだと思いますが、こういう場合の対処法を教えてください。



var PrefArea = function() {

this.pref_list = $("#pref_list");
this.select_pref_id = '';

this.hoge = function() {

this.pref_list.find("input").each(function(){
// (略)
this.select_pref_id = this.id; ← プロパティselect_pref_idにアクセスできない(1)
});

}

this.fuga = funciton (data) {
// (略)
this.pref_list.append(pref); ← プロパティpref_listにアクセスできない(2)
}

}


pref_area = new PrefArea();

$.ajax({
type:'get',
url:url,
success: function(data) {
pref_area.fuga(data);
}
});


(1)はeachループの中だとアクセスできないというのが原因と考えています
(2)はajaxでコールバック関数っぽく呼んでるのが原因と考えています。


よろしくお願いします。

●質問者: spacewarp
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●200ポイント ベストアンサー

each の関数の中では、this はイテレートされているオブジェクトを指しています。
二番目のは、質問に書かれている範囲だと this で自身にアクセスできているような気もしますが、こんな感じでしょうか。

var PrefArea = function() {
 ...

 var self = this; // おまじない

 this.hoge = function() {
 self.pref_list.find("input").each(function(){
 // (略)
 self.select_pref_id = this.id; // self を通じて自身にアクセスする
 });
 };


 this.fuga = function (data) {
 // (略)
 self.pref_list.append(pref); // self を通じて自身にアクセスする
 };
};

spacewarpさんのコメント
回答ありがとうございます。 selfを挟むことでどちらも解決することができました!
関連質問

●質問をもっと探す●



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