2013-06-19 21 views
1

假设我们有一本书的三章,他们都位于自己的URL是这样的:OO的Javascript - 在Object.prototype中的对象实例化

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

现在假设我们要思考OO,创建2个JS对象(使用jQuery的帮助下):

  • :它加载到章的元素,
  • 预订:垂直地显示的章节(一前一后)。

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.prototype中的对象“章节”的实例化?

谢谢

回答

0

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

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

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

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

+0

谢谢@elclanrs。对于不同的答案,我有点困惑。你有没有机会写出更完整的工作示例?在Book对象定义(包括循环/循环)中实例化“章节”类型的对象的最佳方法是什么? –

0

当我开始写OO风格的JavaScript我读this article。那里有一些很好的提示和解决方案!

0

你尝试过这样的:

(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); 
+1

方法是什么?这是我写的东西的复制/粘贴。对不起,它没有回答这个问题。 –

+0

对不起,我误解了问题。现在检查我更新的答案。 – Sudarshan

+0

没问题,但仍不明白你的答案。 Book对象定义(它应该实例化一些类型为“Chapter”的对象)在哪里? –

0

啊我没好之前,读了你的问题。我会这样做:

// 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)); 
} 
+0

关于为什么我使用this.getChapterId的原因:http://stackoverflow.com/questions/17173289/oop-javascript-is-get-property-method-necessary –

+0

我同意“保持简单”,但 - 名称?作者?谁提到他们?我只是问如何定义一个应该使用Chapter对象的Book对象。谢谢。 –

+0

好吧,现在你有非常简单的书... –