【发布时间】:2015-12-11 22:48:10
【问题描述】:
当我只用一个 Cat (var cat1) 实例运行这个程序时,它运行良好。 当我运行第二个实例时 (var cat2),事情停止工作。
function main() {
var catPic = document.getElementById('catPic');
var numClicks = 0;
var numCats = -1;
var scope;
var Cat = function Cat(name, url) {
numCats++;
scope = this;
this.name = name;
this.url = url;
this.numClicks = 0;
this.clickId = 'clicks' + numCats;
window.onload = function() {
//Puts a new Cat on the screen. The name, image, and # of clicks will be shown.
appendCat(scope.name, scope.url, scope.clickId, scope.numClicks, numCats);
}
};
var cat1 = new Cat('Bob', 'https://lh3.ggpht.com/nlI91wYNCrjjNy5f-S3CmVehIBM4cprx-JFWOztLk7vFlhYuFR6YnxcT446AvxYg4Ab7M1Fy0twaOCWYcUk=s0#w=640&h=426');
var cat2 = new Cat('Samantha', 'https://lh3.ggpht.com/nlI91wYNCrjjNy5f-S3CmVehIBM4cprx-JFWOztLk7vFlhYuFR6YnxcT446AvxYg4Ab7M1Fy0twaOCWYcUk=s0#w=640&h=426');
}
main();
问题与 appendCat();功能。
//Puts a new Cat on the screen. The name, image, and # of clicks will be shown.
function appendCat(name, url, clickId, numClicks, numCats) {
document.body.appendChild(document.createElement('div'));
document.getElementsByTagName('div')[numCats].setAttribute('id', 'cat' + numCats);
document.body.getElementById().appendChild(document.createElement('h2'));
document.getElementsByTagName('h2')[numCats].textContent = name;
document.body.appendChild(document.createElement('img'));
document.getElementsByTagName('img')[numCats].setAttribute('id', name);
document.getElementsByTagName('img')[numCats].setAttribute('src', url);
document.body.appendChild(document.createElement('p'));
document.getElementsByTagName('p')[numCats].setAttribute('id', clickId);
document.getElementsByTagName('p')[numCats].textContent = numClicks;
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createElement('br'));
}
当运行此函数的前两行时,document.getElementsByTagName('div')[numCats] 的计算结果为未定义。我不确定为什么会这样。 Console.log() 对我也没有多大帮助。谢谢!
【问题讨论】:
-
这是实际代码吗?不确定
document.body.getElementById()将如何运行而不会出现错误。另外,您将var scope放入main()而不是function Cat()有点奇怪。事实上,每个新的Cat都会将其this设置为所有Cat对象的scope。 -
它不是 C++。为什么在构造函数中使用
window.onload和appendCat?而您的scope.numClicks始终为 0。 -
谢谢!我已经完全删除了范围变量。我还将所有不应该在构造函数中的东西移到了别处。感谢你们两个(当然还有@Ethan Lynn),我绝对不会再犯我在这段代码中犯的错误了。
-
什么是 document.body.getElementById() ?不知道它怎么能运行一次?
标签: javascript debugging undefined