Javascript:对象属性未被识别

时间:2018-06-02 14:40:02

标签: javascript oop object properties

我有一个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属性不被识别?

5 个答案:

答案 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)