我是编程的新手,我正在研究史蒂芬·富特(Steven Foote)的《学习编程》一书。我试图找出为什么Chrome告诉我出现以下两个错误:
未捕获的TypeError:无法读取未定义的属性“ currentDate”
Uncaught TypeError:无法读取未定义的属性“ projectName”
这是我写的:
values.js
var kbValues = {
projectName: 'kittenbook',
versionNumber: '0.0.1',
currentDate: new Date(),
currentTime: [kbValues.currentDate.getFullYear() + '-' +
(kbValues.currentDate.getMonth() + 1)+ '-' +
kbValues.currentDate.getDate() + ' at ' +
kbValues.currentDate.getHours() + ':' +
kbValues.currentDate.getMinutes() + ':' +
kbValues.currentDate.getSeconds()]
};
kittenbook.js
document.body.innerHTML = '<h1>Hello, ' + userName + '!</h1>' +
'<p>' + kbValues.projectName + '' + kbValues.versionNumber +
' accessed on: ' + kbValues.currentTime + '</p>';
manifest.json
{
"manifest_version": 2,
"name": "kittenbook",
"description": "Replace photos on Facebook with kittens",
"version": "0.0.1",
"content_scripts": [
{
"matches": ["*://www.facebook.com/*"],
"js": ["js/values.js","js/kittenbook.js"]
}
]
}
我真的很新。
答案 0 :(得分:0)
您不能在变量定义期间使用属性,而是在分配变量之前尝试访问kbValues的currentDate
如您所见,此代码段将返回错误:
var kbValues = {
projectName: 'kittenbook',
versionNumber: '0.0.1',
currentDate: new Date(),
currentTime: [kbValues.currentDate.getFullYear() + '-' +
(kbValues.currentDate.getMonth() + 1)+ '-' +
kbValues.currentDate.getDate() + ' at ' +
kbValues.currentDate.getHours() + ':' +
kbValues.currentDate.getMinutes() + ':' +
kbValues.currentDate.getSeconds()]
};
相反,您应该尝试在变量定义之前分配日期,这样您便可以访问日期
var currentDate = new Date();
var kbValues = {
projectName: 'kittenbook',
versionNumber: '0.0.1',
currentDate,
currentTime: [currentDate.getFullYear() + '-' +
(currentDate.getMonth() + 1)+ '-' +
currentDate.getDate() + ' at ' +
currentDate.getHours() + ':' +
currentDate.getMinutes() + ':' +
currentDate.getSeconds()]
};
console.log(kbValues)