1

私はETFクラスを書きました。これは、JavaScript で OOP を記述しようとする試みです。

このクラスは ETF と呼ばれます。メソッドは getData と draw です。メソッド「getData」からメソッド「draw」にアクセスしようとしています

function ETF(){
    //global variable


}
//class methods => getData (from xml file), draw(draws the bar )
ETF.prototype ={
    getData: function(is_load, DateDiff){

        $.getJSON(
            "server/ETF.server.php",{
                mycase: 1
            },
            function(data){
                lng_pr  = data.longs_prec;
                sh_pr   = data.shorts_prec;
                ETF.draw(lng_pr, sh_pr); // <== how to access the draw method?
        });

    },//end getData
    //draw the 
    draw: function(lng_pr, sh_pr){
         //draw code..
        }

「this.draw」を試しましたが、何もしませんでした..

誰でも?

4

2 に答える 2

1

$.getJSON 内でアクセスできるように、「this」を変数に割り当てる必要があります。this.draw(lng_pr, sh_pr) を使用してメソッドを呼び出そうとした場合、「this」は現在の ETF オブジェクトではなく、$.getJSON のコンテキストを参照しています。

方法は次のとおりです。

function ETF(){
    //global variable


}
//class methods => getData (from xml file), draw(draws the bar )
ETF.prototype ={
    getData: function(is_load, DateDiff){
        var obj = this;  //assign current ETF object to a variable

        $.getJSON(
            "server/ETF.server.php",{
                mycase: 1
            },
            function(data){
                lng_pr  = data.longs_prec;
                sh_pr   = data.shorts_prec;
                obj.draw(lng_pr, sh_pr);  //will call your draw method below
        });

    },//end getData
    //draw the 
    draw: function(lng_pr, sh_pr){
         //draw code..
    }
于 2012-06-21T13:58:52.323 に答える
-1

次のように「クラス」を書いてみませんか?

function ETF() {
    var that = this,
        /* holds the public methods / properties */
        thisObject = {};


    thisObject.getData = function(is_load, DateDiff){

        $.getJSON(
            "server/ETF.server.php",{
                mycase: 1
            },
            function(data){
                lng_pr  = data.longs_prec;
                sh_pr   = data.shorts_prec;
                thisObject.draw(lng_pr, sh_pr); // <== how to access the draw method?
        });

    };// end getData

    thisObject.draw = function(lng_pr, sh_pr){
         //draw code..
    };

    return thisObject;
}

var etfObject = new ETF();
于 2012-06-21T14:17:26.430 に答える