新しく作成されたオブジェクトを JavaScript 配列にプッシュすると、最後にプッシュされたオブジェクトが古いオブジェクト内の一部を上書きするかのように、配列の一部の要素が最後の要素と同じになります。以下に示すように。
var urlRoot = "http://.../";
var allBooks = [];
var i = 1;
var max = 2; //3;
getPage(i);
function getPage(bookNo) {
if (i > max) {
return;
}
$.ajax({
url: urlRoot + bookNo,
type: 'GET',
cache: false,
success: function(res) {
var html = res.responseText;
allBooks.push(new Book(html));
//allBooks[i - 1] = new Book(html);
console.log(allBooks);
i++;
getPage(i);
}
});
}
console.log(allBooks) は、2 つの要素のみがプッシュされ、3 つの要素がプッシュされた場合に以下の結果を示します (ラベル 'EnglishbookHeading' の値は変化しますが、配列 'Pages' の内容は最後にプッシュされたものとすべて同じです)。
[Book, Book]
0: Book
EnglishbookHeading: "Revelation"
Hadiths: Array[43]
__proto__: Book
1: Book
EnglishbookHeading: "Belief"
Hadiths: Array[43]
__proto__: Book
length: 2
Array[3]
0: Book
EnglishbookHeading: "Revelation"
Pages: Array[53]
__proto__: Book
1: Book
EnglishbookHeading: "Belief"
Pages: Array[53]
__proto__: Book
2: Book
EnglishbookHeading: "Knowledge"
Pages: Array[53]
__proto__: Book
length: 3
Book.js :
define(["Page"],
function (Page) {
var englishbookHeading;
var thisPages = [];
function Book(html) {
setBook(html);
this.EnglishbookHeading = englishbookHeading;
this.Pages = thisPages;
};
function setBook(html) {
var con = $(html); //Context
...
var chapters = tumHadisler.find('div.chapter');
var index = 0;
chapters.each(function () {
var Page = new Page();
...
thisPages[index] = Page;
index++;
});
}
return Book;
});
Page.js :
define(function () {
function Page() {
this.ChapterId = "";
...
}
return Page;
});