2012-01-13 49 views
3

我有一個JSON結構;使用JSON數組的內容創建具有原型函數的JavaScript對象

{ 
    books: [ 
    {"id": "book1", "title": "Book One"}, 
    {"id": "book2", "title": "Book Two"} 
    ] 
} 

其中代表;

function BookList() { 
    this.books = new Array(); 
} 

BookList.prototype.addBook = function(b) { 
    this.books[this.books.length] = b; 
} 

function Book(id, title) { 
    this.id = id || ''; 
    this.title = title || ''; 
    this.chapters = new Array(); 
} 

Book.prototype.addChapter = function(c) { 
    this.chapters[this.chapters.length] = c; 
} 

在BookList中創建Book對象數組的最佳方法是什麼?

使用jQuery,您可以使用$.parseJSON(jsonData).books來分配BookList數組並自動獲取屬性值,但不會使用原型函數創建所需的對象。

迭代JSON數組並單獨創建每個Book對象的唯一方法是?這個問題涉及從JSON創建特定的原型對象:Parse JSON String into a Particular Object Prototype in JavaScript

我認爲這可以擴展到適用於具有正確迭代級別的BookList,並從那裏應用於Book對象的章節。

是否可以在初始分配後使用$.parseJSON更改對象類型?

回答

2
var json = { 
    books: [ 
    {"id": "book1", "title": "Book One"}, 
    {"id": "book2", "title": "Book Two"} 
    ] 
}; 

var list = new BookList(); 
list.books = json.books.map(convertToBook); 

function convertToBook(book) { 
    return new Book(book.id, book.title); 
} 
+0

我試圖找到'.map'上的更多信息,但沒有發現任何有用的東西。有你知道的資源嗎?因爲函數調用中有很多範圍,所以工作得很好。我使用的對象比例子有更多的屬性,所以我剛剛使用'return $ .extend(new Book(),json);'這提供了我不搞亂的屬性名稱。謝謝。 – 2012-01-13 02:34:04

+0

[map](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map) – Raynos 2012-01-13 10:59:36

相關問題