我正在尝试设置一个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
。
我确信我只是在忽视某些事情。如果您知道这个问题,请感谢。
答案 0 :(得分:5)
你会得到很多教程来理解这一点,但在这里我试图用几行代码来说明它。在firebug控制台或Chrome控制台中执行以下操作
输入this
并按Enter键
<强>&GT;窗口 //现在它是全局范围
运行以下代码
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
<强>&GT; 1100 //因为MyObect
在全局范围内声明,而表达式sum:this.a+this.b
this
是Window对象。所以sum: 400 + 500
现在运行
MyObject.getSum();
<强>&GT; 60 //因为getSum
是MyObject
的方法。如果在MyObject.getSum()
getSum
内调用this
,则会MyObject
。所以它返回20 + 40
答案 1 :(得分: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);