这是我以前拥有的代码,效果很好:
var todayTime = new Date();
(function updateClock() {
todayTime.setTime(todayTime.valueOf() + 1000);
// In 2 digit format.
document.getElementById("hours").innerHTML = ("0" + todayTime.getHours()).slice(-2);
document.getElementById("minutes").innerHTML = ("0" + todayTime.getMinutes()).slice(-2);
document.getElementById("seconds").innerHTML = ("0" + todayTime.getSeconds()).slice(-2);
setTimeout(updateClock, 1000);
})();
我试图将其更改为对象文字,以便可以更好地与之交互。
我要在这里执行的操作是在定义
start()
对象时自动执行LiveTime
。还需要跟踪超时ID,以便在每次调用
stop()
方法时都可以使用它。var LiveTime = {
element: document.getElementById("current-time"),
date: new Date(),
timeoutId: 0,
start: (function() {
LiveTime.timeoutId = setTimeout(function() {
LiveTime.date.setTime(LiveTime.date.valueOf() + 1000);
LiveTime.element.innerHTML = ("0" + LiveTime.date.getHours()).slice(-2) + ":"
+ ("0" + LiveTime.date.getMinutes()).slice(-2) + ":"
+ ("0" + LiveTime.date.getSeconds()).slice(-2);
}, 1000);
})(),
stop: function() {
clearTimeout(LiveTime.timeoutId);
}
}
不幸的是,代码给了我很多未定义的错误。
未捕获的TypeError:无法设置未定义的属性“日期”
我在做什么错,我该如何解决以及其他任何我的代码错误呢?
最佳答案
您正在将start定义为自执行函数。这意味着在创建LiveTime对象时,start将设置为该函数的结果。但是,由于该函数在仍创建LiveTime的同时正在运行,因此LiveTime是未定义的。将开始定义更改为
start: function() {
LiveTime.timeoutId = setTimeout(function() {
LiveTime.date.setTime(LiveTime.date.valueOf() + 1000);
LiveTime.element.innerHTML = ("0" + LiveTime.date.getHours()).slice(-2) + ":"
+ ("0" + LiveTime.date.getMinutes()).slice(-2) + ":"
+ ("0" + LiveTime.date.getSeconds()).slice(-2);
}, 1000);
},
并且它应该可以工作(这仍然是您的代码,没有检查可能存在的任何其他错误)
关于javascript - 使我的LiveTime对象文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26569778/