自引用对象如何在JavaScript函数中工作?

Spe*_*ley 0 javascript

我正在尝试设置一个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);
      }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做的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);
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下console.log(lifeData.otp)返回NaN.

我确信我只是在忽视某些事情.如果您知道这个问题,请感谢.

Dio*_*ode 5

你会得到很多教程来理解这一点,但在这里我试图用几行代码来说明它.在firebug控制台或Chrome控制台中执行以下操作

  1. 输入this并按Enter键

    >窗口 //现在是全局范围

  2. 运行以下代码

    this.a = 500;
    this.b = 600;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在运行以下代码;

    var MyObject = {
        a: 20,
        b: 40,
        sum: this.a + this.b,
        getSum: function(){
            return this.a + this.b;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在运行以下命令

       MyObject.sum
    
    Run Code Online (Sandbox Code Playgroud)

    > 1100 //因为MyObect在全局范围内声明,而在表达式中sum:this.a+this.b this 是Window对象.所以sum: 400 + 500

  5. 现在跑

       MyObject.getSum();
    
    Run Code Online (Sandbox Code Playgroud)

    > 60 //因为getSum是一种方法MyObject.当调用喜欢MyObject.getSum()里面的getSum thisMyObject.所以它返回20 + 40