【问题标题】:Create JavaScript objects with prototype functions from contents of JSON array从 JSON 数组的内容创建带有原型函数的 JavaScript 对象
【发布时间】:2012-02-09 06:50:26
【问题描述】:

我有一个 JSON 结构;

{ 
  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 初始分配后更改对象类型?

【问题讨论】:

    标签: javascript json


    【解决方案1】:
    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);
    }
    

    【讨论】:

    • 我试图在.map 上找到更多信息,但没有找到任何有用的信息。有你知道的资源吗?工作得很好,因为函数调用中有足够的范围。我正在使用的对象比示例具有更多的属性,所以我只使用了return $.extend(new Book(), json);,前提是我不会弄乱属性名称。谢谢。
    • map
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多