0

我的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 有问题。

有想法该怎么解决这个吗?

4

1 回答 1

1

更改此行:

p = ArticleObject(data.heading, data.date, data.author)

要使用new运算符:

p = new ArticleObject(data.heading, data.date, data.author)

然后在你的ArticleObject()函数中你不需要说return this;,因为this当函数被调用时会自动返回new

发生的情况是,当您使用newJavaScript 调用该函数时,会创建一个新对象,该对象继承自ArticleObject.prototype该函数并在该函数内this指向该新实例。当您在没有newJavaScript 的情况下调用该函数时,它会设置this为,window因此每次您的函数运行时它只会更新window.

有关使用的更多信息,new请阅读MDN 对此的评论

于 2012-07-15T04:06:56.443 回答