我的javascript页面遇到了很多问题。
基本上,我有一个从php页面获取数据的html/javascript页面。我多次这样做,将它们推入数组,然后显示数组。
以下是代码的概要
var spawnedNewspaper = [];
var articlesToSpawn = null;
$("#generate").click(function() {
spawnNewspaper();
});
function spawnNewspaper(){
if(itemsToSpawn==null){
articlesToSpawn = 4;
spawnedNewspaper = [];
}
if(itemsToSpawn > spawnedNewspaper.length)
spawnAnItem();
if(itemsToSpawn == spawnedNewspaper.length){
itemsToSpawn = null;
// ... display the results
}
}
function spawnAnItem(nationalDexID, level, generateRandomBerry, generateRandomTMItem, generateRandomItem, knowsRandomTM, imageURL){
$.getJSON("...url.../spawner_json.php?jsoncallback=?" ,
{
dataitename: data
}
, spawnAnArticlePart2
);
}
function spawnAnArticlePart2(data){
//returning from spawnAnItem callback
p = ArticleObject(data.heading, data.date, data.author)
spawnedNewspaper.push(p);
spawnNewspaper();
}
function ArticleObject(heading, date, author){
this.heading = heading;
this.date = date;
this.author = author;
return this;
}
因此,完成后,它会显示我的数组中有正确数量的文章,但当我知道它每次都生成独特的东西时,每一篇文章都是完全相同的。
我的想法是存在并发问题,并且事情被覆盖(我使用了push(),所以这很奇怪),或者我的ArticleObject有问题。
关于如何解决这个问题有什么想法吗?
更改此行:
p = ArticleObject(data.heading, data.date, data.author)
使用new
运算符:
p = new ArticleObject(data.heading, data.date, data.author)
然后在ArticleObject()
函数中,您不需要说return this;
,因为当使用new
调用函数时,this
将自动返回。
当您使用new
调用函数时,JavaScript会创建一个新对象,该对象继承自ArticleObject.prototype
,并且在函数this
中指向该新实例。当您在没有new
的情况下调用函数时,JavaScript会将this
设置为window
,因此每次运行函数时,它只会更新window
上的相同属性。
有关使用new
的更多信息,请阅读MDN对此的介绍。