0

次のようなクラスを定義します。

var LoadingPolecy={
    initialize:function(){
        return function(){
               this.initialize.apply(this,arguments);
        }    
    }
}
var AjaxLoadingPolecy= LoadingPolecy.initialize();
AjaxLoadingPolecy.prototype={
    initialize:function(name){
        this.name=name;
    },
    AjaxStartPolecy : function(){
        ...
    },
    AjaxStopPolecy : function(){
        ...   
    },
    SetName : function(name){
        ...
    }
}
var TempLoadingPolecy=LoadingPolecy.initialize();
TempLoadingPolecy.prototype={
    initialize:function(displayArea,source,data){
        this.loadingMsgPolecy = new AjaxLoadingPolecy();
                ...
        },
        StartLoadingTempPolecy : function(callback){
        this.loadingMsgPolecy.SetName('view');
        this.loadingMsgPolecy.AjaxStartPolecy();
        var a = $.ajax({
          ...
          success:function(html){
              callback(html);
          }
        });
    },
        EndLoadingTempPolecy : function(html){
           //Cannot call method 'AjaxStopPolecy' of undefined error
        this.loadingMsgPolecy.AjaxStopPolecy();
                ....
        }
}

このオブジェクトが変更されたようですが、初期化で定義した変数をどのように呼び出し/使用できますか?

4

1 に答える 1

1

ajax 成功コールバック (および他のほとんどのコールバックでも同じ) では、同じthis. ただし、以前のコピーthisを別の変数に保存して、その方法でアクセスできます。

コードのどの部分について尋ねているのかわかりませんが、以下に適応できる簡単な例を示します。

initialize:function(displayArea,source,data){
    StartLoadingTempPolecy : function(callback) {
        this.loadingMsgPolecy.SetName('view');
        this.loadingMsgPolecy.AjaxStartPolecy();
        // save copy of `this` for future use in the success handler
        var self = this;
        var a = $.ajax({
          ...
          success:function(html) {
              // you can use the variable `self` here to access the previous this ptr
              callback(html);
          }
    });
},
于 2012-07-19T06:11:57.733 に答える