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;thisnew

何が起こっているのかというと、JavaScriptを使用して関数を呼び出すと、関数ポイントnewから継承し、その新しいインスタンスを指す新しいオブジェクトが作成されます。JavaScriptを使用せずに関数を呼び出すと、関数が実行されるたびに、の同じプロパティが更新されるように設定されています。ArticleObject.prototypethisnewthiswindowwindow

使用の詳細については、MDNがそれについて言っていることnewを読んでください。

于 2012-07-15T04:06:56.443 に答える