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

自引用对象如何在JavaScript函数中工作?,javascript,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 =

我试图设置一个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);
      }
}
在这种情况下,
console.log(lifeData.otp)
返回
NaN


我确信我只是忽略了一些东西。如果你知道这个问题,我将不胜感激

你不能做你想做的事

考虑:

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


你不能做你想做的事

考虑:

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


您将获得许多教程来理解这一点,但在这里,我试图用几行代码来说明这一点。在firebug控制台或Chrome控制台中执行以下操作

   MyObject.sum
  • 输入
    并按enter键

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

  • 运行以下代码

    this.a = 500;
    this.b = 600;
    
  • 现在运行以下代码

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

       MyObject.sum
    
    >1100//因为
    MyObect
    是在全局范围和表达式
    sum中声明的:this.a+this.b
    this
    是窗口对象。所以
    总和:400+500

  • 快跑

       MyObject.getSum();
    
    >60//因为
    getSum
    MyObject
    的一种方法。当在
    getSum
    中调用像
    MyObject.getSum()
    这样的函数时,此
    将成为
    MyObject
    。因此它返回
    20+40


  • 您将获得许多教程来理解这一点,但在这里,我试图用几行代码来说明这一点。在firebug控制台或Chrome控制台中执行以下操作

       MyObject.sum
    
  • 输入
    并按enter键

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

  • 运行以下代码

    this.a = 500;
    this.b = 600;
    
  • 现在运行以下代码

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

       MyObject.sum
    
    >1100//因为
    MyObect
    是在全局范围和表达式
    sum中声明的:this.a+this.b
    this
    是窗口对象。所以
    总和:400+500

  • 快跑

       MyObject.getSum();
    
    >60//因为
    getSum
    MyObject
    的一种方法。当在
    getSum
    中调用像
    MyObject.getSum()
    这样的函数时,此
    将成为
    MyObject
    。因此它返回
    20+40


  • 我删除了我最初的评论,但后来我意识到我是对的:-)this的值与正在构造的对象文本没有任何关系。它只与函数调用上下文有关。基本上没有直接的方法来完成JavaScript中的工作。您必须使用单独的语句。当我提醒this.min时,它会提醒25000。我假设this.min与lifeData相同。min
    这是
    窗口,而不是
    lifeData
    。它是,但在“test”函数调用中。调用
    lifeData.test()
    时,函数调用本身确保函数中的
    this
    被设置为引用“lifeData”对象。但是,在初始化对象的对象文本中,情况并非如此。在该上下文中,
    this
    有一个由该
    var
    声明的上下文确定的值。@My\n不,它不起作用。尝试调用
    lifeData.otp
    你会看到你得到了一个
    NaN
    回复。我删除了我原来的评论,但后来我意识到我是对的:-)这个
    的值与一个正在构造的对象文本没有任何关系。它只与函数调用上下文有关。基本上没有直接的方法来完成JavaScript中的工作。您必须使用单独的语句。当我提醒this.min时,它会提醒25000。我假设this.min与lifeData相同。min
    这是
    窗口,而不是
    lifeData
    。它是,但在“test”函数调用中。调用
    lifeData.test()
    时,函数调用本身确保函数中的
    this
    被设置为引用“lifeData”对象。但是,在初始化对象的对象文本中,情况并非如此。在该上下文中,
    this
    有一个由该
    var
    声明的上下文确定的值。@My\n不,它不起作用。尝试调用
    lifeData.otp
    您将看到返回一个
    NaN
    。或者“otp”属性可能是对“onTimePoints”调用的函数包装器。最后一个块是我正在使用的,因为每次触发事件时,我都将创建一个新实例。这是为了用正确的数字刷新视图。似乎是最好的解决方案。或者“otp”属性可能是对“onTimePoints”调用的函数包装器。最后一个块是我正在使用的,因为每次触发事件时,我都将创建一个新实例。这是为了用正确的数字刷新视图。似乎是最好的解决方案。一个小的修正。它不应该是900,应该是1100
    500+600
    。一个小的修正。它不应该是900,应该是1100
    500+600