自引用对象如何在JavaScript函数中工作?
我试图设置一个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 =
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,应该是1100500+600
。一个小的修正。它不应该是900,应该是1100500+600
。