0

私はJavascriptに少し慣れていません。私は仕事のプロジェクトを行っていますが、パーセンテージを返す方法を取得するのに問題があります。

function campaignProgress(goal, current){
    this.goal = goal;
    this.current = current; 
    this.percent =  Math.floor(current / goal  * 100);

    this.getGoal = function(){
        return goal;
    }
    this.getCurrent = function(){
        return current;
    }
    this.getPercent = function(){   
        return percent;
    }
}


var totalProgress = new campaignProgress(1.70, 1.064);

html ファイルで呼び出すと、ヘッダーと使用する本文で .js ファイルを参照します。

<script type="text/javascript">

        document.write(totalProgress.getGoal());

        document.write(totalProgress.getPercent());

</script>

getGoal() メソッドは問題なく動作しますが、getPercent() は何も返しません。このようにパーセント変数自体を参照できます。

totalProgress.percent

そしてそれはうまく印刷されます。これが機能しない理由についてのアドバイスをいただければ幸いです。

4

5 に答える 5

2

クロージャーを使用する必要がありますvar that = this;

function campaignProgress(goal, current) {
    this.goal = goal;
    this.current = current; 
    this.percent =  Math.floor(current / goal  * 100);

    var that = this;
    this.getGoal = function() {
        return that.goal;
    }
    this.getCurrent = function(){
        return that.current;
    }
    this.getPercent = function(){   
        return that.percent;
    }
}


var totalProgress = new campaignProgress(1.70, 1.064);
console.log(totalProgress.getGoal());
console.log(totalProgress.getPercent());

これは常に function() 内の値です。 this.goal をどこで呼び出すか (前述のとおり)、それは単純に goal を呼び出すのと同じです。

于 2013-07-22T20:55:06.700 に答える
0

ゴールは各関数のクロージャー (関数に渡されるゴール引数) 内で定義されているため、機能します。他のキーワードは this キーワードで参照されていないため機能しません (一部の言語ほどオプションではありません)。残念ながら、これが機能する方法により、これを各サブ関数の return ステートメントに単純に追加することはできません (プロトタイプに取り組んでいないため、この値はどこにいるかによって変わる可能性があります)。からこれらの関数を呼び出す)。したがって、太字の変更を使用してください。

function campaignProgress(goal, current){
    var self = this;
    this.goal = goal;
    this.current = current; 
    this.percent =  Math.floor(current / goal  * 100);

    this.getGoal = function(){
        return self.goal;
    }
    this.getCurrent = function(){
        return self.current;
    }
    this.getPercent = function(){   
        return self.percent;
    }
}

self 変数を使用することで、関数を最初に呼び出したときに必要な値を取得し、それを操作します。

于 2013-07-22T20:55:11.130 に答える