繁体   English   中英

OO Javascript-Object.prototype中的对象实例化

[英]OO Javascript - Objects instantiation in Object.prototype

假设我们有一本书的三章,它们位于自己的URL上,如下所示:

  • 第1章= /1.html
  • 第2章= /2.html
  • 第3章= /3.html

现在假设我们要考虑面向对象,并创建2个JS对象(借助jQuery):

  • 章节 :将章节加载到元素中,以及
  • Book :垂直显示章节(一个接一个)。

JS代码:

// Chapter
function Chapter(chapterId)
{
    this.chapterId = chapterId;
}

Chapter.prototype =
{
    getChapterId: function()
    {
        var chapterId = this.chapterId;
        return chapterId;
    },
    loadChapter: function(el)
    {
        $(el).load( this.getChapterId + ".html" ); // Ajax
    }
}

// Book
function Book()
{
    // ?
}

Book.prototype =
{
    // ?
}

您认为以面向对象的方式定义对象“ Book”及其原型中的方法的最佳方法是什么?

在Book.prototype中处理对象“章节”的实例化的最优雅方法是什么?

谢谢

当我开始写面向对象的JavaScript时,我读了这篇文章 那里有一些很好的技巧和解决方案!

我只是将章节ID作为参数传递给Book然后将这些章节加载到数组中。 像这样:

// Book
function Book(chapters) {
  this.chapters = chapters.map(function(id){ return new Chapter(id) });
}

var book = new Book([1,2,3,4]);

然后,您可以创建方法来循环章节并根据需要进行操作。

你试过这个吗:

(function (namespace, chapterId) {

var Chapter = function (chapterId) {
    this.chapterId = chapterId;
}

Chapter.prototype ={
getChapterId: function () {
    var chapterId = this.chapterId;
    return chapterId;
},

loadChapter: function (el) {
    $(el).load(this.getChapterId + ".html"); // Ajax
}}

namespace.Chapter = Chapter;
})(new Book(), chapterId);

啊,我之前不太清楚您的问题。 我会做这样的事情:

// Chapter
var Chapter = function(chapterId) {
    this.chapterId = chapterId;
}

Chapter.prototype.loadChapter: function(el) {
    $(el).load( this.chapterId + ".html" ); // Ajax
}


// Book
var Book = function(chapters) {
    this.chapters = (chapters) ? chapters : [];
    this.numberOfChapters = (chapters) ? chapters : 0; 
    // assume that this has to make sence, so if it is number of chapters, 
    // it start with 0.
}

Book.prototype.addChapter = function () {
    this.chapters.push(new Chapter(++this.numberOfChapters));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM