2013-06-19 57 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

好吧,現在你有非常簡單的書... –