0

アイテムの1つが関数であるjavascriptオブジェクトを設定しようとしています。私は少し自己参照を行っていますが、機能していません。

var onTimePoints = function($a, $b, $c, $lifeotr){

    $var1 = ($b - $a) / $c;
    $var2 = ($lifeotr - $a) / $var1;
    if($var2>$c)
    {
    $var2 = $c;
    }
    if($var2<0)
    {
    $var2 = 0;
    }
    $var2 = Math.round($var2);
    return $var2;
}
var lifeData ={
      min: 25000,
      max: 65000,
      otr: 56426,
      maxPoints:100,
      otp: onTimePoints(25000, 65000, 100, 56426),
      test: function(){
        alert(this.min);
      }
}

私がするとき、conosle.log(lifeData.otp)それはうまくいきます。

this.minハードコードされた数字を、などに置き換えると、this.max機能しません。

うまくいかない例を次に示します。

var lifeData ={
  min: 25000,
  max: 65000,
  otr: 56426,
  maxPoints:100,
  otp: onTimePoints(this.min, this.max, this.maxPoints, this.otr),
  test: function(){
    alert(this.min);
  }
}

この場合、をconsole.log(lifeData.otp)返しますNaN

私は何かを見落としているだけだと確信しています。あなたが問題を知っているなら感謝します。

4

2 に答える 2

5

これを理解するためのチュートリアルがたくさんありますが、ここでは数行のコードを使用して説明しようとしています。FirebugコンソールまたはChromeコンソールで次の手順を実行します

  1. 入力してEnterキーthisを押します

    >ウィンドウ//グローバルスコープになりました

  2. 次のコードを実行します

    this.a = 500;
    this.b = 600;
    
  3. 次に、次のコードを実行します。

    var MyObject = {
        a: 20,
        b: 40,
        sum: this.a + this.b,
        getSum: function(){
            return this.a + this.b;
        }
    }
    
  4. 次に、以下を実行します

       MyObject.sum
    

    > 1100 //MyObectグローバルスコープで宣言されており、式sum:this.a+this.b this ではWindowオブジェクトであるため。それでsum: 400 + 500

  5. 今すぐ実行

       MyObject.getSum();
    

    >60 //はのgetSumメソッドであるためMyObjectMyObject.getSum()そして、内部のように呼び出されると、getSum thisになりますMyObject。だからそれは戻ります20 + 40

于 2012-10-11T18:34:04.477 に答える
1

やろうとしていることはできません。

検討:

var lifeData ={
  min: 25000,
  max: 65000,
  otr: 56426,
  maxPoints:100,
  otp: onTimePoints(25000, 65000, 100, 56426),
  otNewcomm: formula,
  test: function(){
    alert(this.min);
  }
}

また

var min = 25000;
var max = 65000;
var otr = 56426;
var maxPoints = 100;
var lifeData ={
  min: min,
  max: max,
  otr: otr,
  maxPoints: maxPoints,
  otp: onTimePoints(min, max, maxPoints, otr),
  otNewcomm: formula,
  test: function(){
    alert(this.min);
  }
}

また

function lifeData(min, max, otr, maxPoints)
{
    this.min = min;
    this.max = max;
    this.otr = otr;
    this.maxPoints = maxPoints;
    this.otp = onTimePoints(min, max, maxPoints, otr);
    ...
}
var lifeDataInstance = new lifeData(25000, 65000, 56426, 100);
于 2012-10-11T18:23:52.123 に答える