使用Javascript创建一个超类(继承)

使用Javascript创建一个超类(继承),javascript,oop,Javascript,Oop,我对JavaScript中的OOP非常陌生,我正试图弄清楚如何创建一个类并从对象传递值(我知道JS没有类,所以我在玩原型)。在这个实践示例中,我试图创建一个类“Library”,它有多个书架,每个书架上有两本书。我想把书放在哪个书架上(书架)从一个书架传递到另一个书架,把书架的数量(以及书架上的书)传递到图书馆。任何帮助都将不胜感激。谢谢 到目前为止,我的代码是这样的: //LIBRARY function Library (name) { this.name = name; } v

我对JavaScript中的OOP非常陌生,我正试图弄清楚如何创建一个类并从对象传递值(我知道JS没有类,所以我在玩原型)。在这个实践示例中,我试图创建一个类“Library”,它有多个书架,每个书架上有两本书。我想把书放在哪个书架上(书架)从一个书架传递到另一个书架,把书架的数量(以及书架上的书)传递到图书馆。任何帮助都将不胜感激。谢谢

到目前为止,我的代码是这样的:

//LIBRARY 
function Library (name)
{
    this.name = name;
}

var lib = new Library("Public");

//SHELVES
Shelves.prototype = new Library();
Shelves.prototype.constructor=Shelves;

function Shelves (name, shelfnum)
{
    this.name = name;
    this.shelfnum = shelfnum;
}

var famous = new Shelves("Famous", 1);
var fiction = new Shelves("Fiction", 2);
var hist = new Shelves("History", 3);


// BOOKS
Book.prototype = new Shelves();
Book.prototype.constructor=Book;

function Book (name, shelf)
{
    this.name = name;
    this.shelf = shelf;
}
var gatsby = new Book("The Great Gatsby", 1);
var sid = new Book("Siddhartha",1);
var lotr = new Book("The Lord of The Rings", 2);
var adams = new Book("John Adams", 3);

正如Ingo在评论中所说,您的示例将不是继承的好候选。继承是指对象与其他类型共享功能。
继承示例: Bannana函数将继承自水果函数。 卡车函数将继承自汽车函数

在这两种情况下,更具体的对象继承自更广泛的类别。当您可以使用多重继承时,您可能希望通过继承实用程序函数向对象添加功能:也就是说,您的所有函数都可以从以某种方式记录错误的函数继承。然后,所有函数都可以访问错误日志记录方法

但是,在您的情况下,您应该采用不同的策略,使用数组或列表来构造程序,因为库有许多工具架,但工具架并不具有库的相同特征,因此不是继承的候选对象

我会这样做:

function Library(name) {
     this.name = name;
     this.shelves = new Array();
}
function Shelf(name, num){
     this.name = name;
     this.num = num;
     this.books = new Array();
}
function Book(name) {
     this.name = name;
 }

var lib = new Library("Lib");
lib.shelves.push(new Shelf("Classics",1));
lib.shelves.push(new Shelf("Horror", 2));

//shelves[0] is Classics
lib.shelves[0].books.push(new Book("The Great Gatsby"));  
lib.shelves[0].books.push(new Book("The Lord of the Rings")); 

//shelves[1] is Horror
lib.shelves[1].books.push(new Book("Dr. Jekyll and Mr. Hyde")); 



console.log(lib.shelves.length); //# of Shelves in library
console.log(lib.shelves[0].books.length); //# of books in Classics shelf

希望这对你的项目有帮助。当您的项目需要Javascript中的OOP时,这会很有帮助:

OT:这没有意义。为什么
书架
要从
图书馆
扩展到
书籍
要从
书架
扩展到
?让图书馆保存一个书架列表会更好,每个书架都保存着一个图书列表。为了扩展@IngoBürk所说的内容,书架不是图书馆,书籍也不是书架。这更有意义——感谢包括Mozilla源代码在内,这也非常有帮助!