我的javascript页面遇到了很多麻烦。
基本上,我有一个html / javascript页面,可以从php页面获取数据。我这样做了多次,将它们推入数组,然后显示数组。
这是代码的纲要
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存在问题。
有关如何解决此问题的任何想法?
答案 0 :(得分:1)
更改此行:
p = ArticleObject(data.heading, data.date, data.author)
使用new
运算符:
p = new ArticleObject(data.heading, data.date, data.author)
然后在ArticleObject()
函数中,您不需要说return this;
因为this
会在使用new
调用函数时自动返回。
当您使用new
调用该函数时,会发生什么事情.JavaScript创建一个继承自ArticleObject.prototype
且在函数this
内指向该新实例的新对象。当您在没有new
的情况下调用该函数时,JavaScript会将this
设置为window
,因此每次您的函数运行时,它都会更新window
上的相同属性。
有关使用new
阅读what MDN has to say about it的详细信息。