JavaScript数据结构: Object oriented or array?

标签 javascript

假设我在面向对象范例中有两个类:图书馆和书籍。 它们分别具有libraryName 和bookName 属性。 每个图书馆都包含一系列书籍(大小不定)。

从一本书中,我想获取其图书馆的名称,并从图书馆中获取其包含的所有书籍的名称。

在 Javascript 中实现此功能的最佳方法是什么(最好使用面向对象的 Javascript)?

例如,我的代码可以这样开始:

function library(libraryName){
     this.LibraryName=libraryName;
     this.books = new Array();
}

最佳答案

您可以在 Library 类中构建一个方法来实现此目的。例如:

定义库对象。

function Library (name) {
    this.libraryName = name;
    this.books = [];
}

定义原型(prototype)方法“addBook”

Library.prototype.addBook = function(book) {
    book.libraryName = this.libraryName;
    this.books.push(book);
}

正如您在 addBook 方法中所看到的,该书被赋予了图书馆的名称,并添加到了图书馆的书籍数组中。或者,您可以添加对库对象本身的引用。

替代原型(prototype)方法“addBook”

Library.prototype.addBook = function(book) {
    book.library = this;
    this.books.push(book);
}

这确保了如果库名称稍后更新,从 Book 对象获取它将直接指向库对象,从而保持最新状态。

接下来我们定义 Book 对象。

function Book (name) {
    this.bookName = name;
    this.library = {};
}

这就是我们所需要的。现在我们可以与这些对象交互。

//First we declare the objects
var hp = new Book("Harry Potter"),
    lib = new Library("Village Library");

//Add the book to the library
lib.addBook(hp);

//Outputs 'Village Library'
console.log(hp.library.libraryName);

lib.libraryName = "The new Library";

//Outputs 'The new Library'
console.log(hp.library.libraryName);    

此外,如果您希望一本书能够位于多个库中,只需稍微更改 Book 对象,如下所示:

function Book (name) {
    this.bookName = name;
    this.libraries = [];
}

您还必须修改“addBook”方法。

Library.prototype.addBook = function(book) {
    book.libraries.push(this);
    this.books.push(book);
}

就是这样!

关于JavaScript数据结构: Object oriented or array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27187152/

相关文章:

javascript - 使用 javascript 和 ASP.NET 无法验证我的 ASP 文本框

javascript - 错误 : Resource interpreted as Document but transferred with MIME type application/pdf

javascript - 使用 Passport + Express 身份验证时,浏览器中不会存储 cookie

javascript - 代理申请方法不调用

javascript - div onmouseout 不符合预期

javascript - 如何使用编辑器制作可调整大小的文本区域

javascript - 在浏览器上使用 Processing.js 播放声音

javascript - 从 HTM 执行 JS 函数

javascript - 标题不在其容器的绝对中心

javascript - 如何解析其中对象不是逗号分隔的 JSON 字符串?