假设我在面向对象范例中有两个类:图书馆和书籍。 它们分别具有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/