使用Javascript创建超类(继承)

时间:2013-10-26 22:08:57

标签: javascript oop

我对JavaScript中的OOP很新,并试图弄清楚如何创建一个类并从对象传递值(我知道JS没有类,所以我正在玩原型)。在这个练习示例中,我正在尝试创建一个具有多个书架的“库”类,每个书架都有几本书。我希望将书籍(书架)上的书架(书架)从书架上传到货架上,并将书架(以及书架上的书籍)的数量传递给图书馆。任何帮助将不胜感激。谢谢!

以下是我的代码到目前为止的样子:

//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);

1 个答案:

答案 0 :(得分:2)

Ingo在评论中说,你的例子不适合继承。继承是指对象是具有其他类型的共享功能 继承示例: Bannana函数将继承Fruit函数。 卡车功能将继承汽车功能。

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

但是,在您的情况下,您应该采用不同的策略来使用数组或列表来构建程序,因为库有很多架子,但架子不具有相同的库特性,因此不适合继承。

我将如何做到这一点:

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的项目时,这可能会有所帮助:Mozilla: Javascript OOP