我有一个foo对象如下:
var foo =
{
"timer" :
{
"hours" : 0,
"minutes" : 0,
"seconds" : 0,
"time" : new Date(1970, 0, 1, foo.timer.hours, foo.timer.minutes, foo.timer.seconds).getTime()
}
};
问题是新的Date()中的foo.timer.hours,foo.timer.minutes和foo.timer.seconds属性无法识别,因为Chrome浏览器中的javascript控制台显示:
Uncaught TypeError: Cannot read property 'timer' of undefined
那么为什么新的Date()中的foo.timer.hours,foo.timer.minutes和foo.timer.seconds属性不被识别?
答案 0 :(得分:2)
foo
语句结束才定义 var foo = { ... };
。您可以在定义foo
之前定义这些变量。
var hours = 0, minutes = 0, seconds = 0;
var foo = {
timer: {
hours, minutes, seconds,
time: new Date( 1970, 0, 1, hours, minutes, seconds ).getTime()
}
};
答案 1 :(得分:1)
创建foo对象的方式不正确...首先创建对象并使用其属性,当变量foo
hasn&时,您尝试引用time属性中的foo
对象已经被认定了......
var foo =
{
"timer" :
{
"hours" : 0,
"minutes" : 0,
"seconds" : 0,
}
};
foo["time"] = new Date(1970, 0, 1, foo.timer.hours, foo.timer.minutes, foo.timer.seconds).getTime();
console.log(foo)

答案 2 :(得分:1)
foo.time = new Date(1970,0,1,foo.timer.hours,foo.timer.minutes,foo.timer.seconds).getTime()
你可以这样做。
答案 3 :(得分:1)
您正在尝试在初始化之前指定一些值。您应该拆分值的声明,然后添加time
键/值函数。
希望这会有所帮助:>
var foo =
{
"timer" :
{
"hours" : 0,
"minutes" : 0,
"seconds" : 0
}
};
foo.timer['time'] = new Date(1970, 0, 1, foo.timer.hours, foo.timer.minutes, foo.timer.seconds).getTime();
console.log(foo)

答案 4 :(得分:1)
另一种方法是向对象添加getter
var foo =
{
"timer" :
{
"hours" : 0,
"minutes" : 0,
"seconds" : 0,
get time(){
return new Date(1970, 0, 1, this.hours, this.minutes, this.seconds).getTime()
}
}
};
console.log(foo.timer.time)