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でコールバック関数っぽく呼んでるのが原因と考えています。


よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/06/16 10:20:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント200pt

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 を通じて自身にアクセスする
    };
};
id:spacewarp

回答ありがとうございます。
selfを挟むことでどちらも解決することができました!

2015/06/15 17:06:34

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

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

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

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

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