2010-01-08 75 views
3

我正在處理一個簡單的問題以表示具有層次結構的幾種類型。有一個數據行包含一些數據,並且數據可能因行的類型而異。一個簡單的行可能只有一個標題和日期,而一個擴展行可能包含標題,描述,日期和圖像。我對Javascript並不陌生,但對於繼續前進的理解並不瞭解。舉一個簡單的例子,這裏是我會怎麼用Java編寫:Javascript中的繼承

interface Row { 
    View getView(); 
} 

class BasicRow implements Row { 
    private String title; 
    private String description; 

    public BasicRow(String title, String description) { 
     this.title = title; 
     this.description = description; 
    } 

    public View getView() { 
     // return a View object with title and description 
    } 
} 

class ExtendedRow implements Row { 
    private String title; 
    private String description; 
    private Date date; 
    private Image image; 

    public ExtendedRow(String title, String description, Date date, Image image) { 
     this.title = title; 
     this.description = description; 
     this.date = date; 
     this.image = image; 
    } 

    public View getView() { 
     // return a View object with title 
     // description, date, and image 
    } 
} 

有跡象表明,可以在這裏完成,如從BasicRow延伸ExtendedRow只有定義新字段以及壓倒一切的getView方法很少OO改進。

Javascript沒有接口或抽象類,恐怕我還沒有下降到原型意義上的思考。那麼我怎麼能夠像Javascript中的上述例子那樣基本實現一些基本類或接口,以及從這個基類繼承的兩個類,每個類都有自己的特定行爲。

任何指針,非常感謝。

回答

7

看看道格拉斯Crockford的文章:

道格拉斯克羅克福德是在雅虎的高級 的JavaScript架構師他 衆所周知的,他的工作在引進 JavaScript對象符號(JSON) - Wikipedia

這些文章是必須讀取次數,我敢肯定,他們會幫助你找出如何構建對象。 「

+1

這些都確實很棒。它確實需要思考的一個重大轉變,我想我會一整天都在竊取小細節,但這些鏈接真的幫助消除了很多疑問 – Anurag 2010-01-08 14:21:41

+0

很高興爲您解決了這個問題。當我第一次閱讀這三篇文章時,我也有過相同的經歷:) – roosteronacid 2010-01-08 15:35:47

2

看一看John Resig's article on inheritance in Javascript。 Resig的工作和Mootools.classMootools庫的一部分)都是Dean Edward的衍生工作Base.js

希望有幫助。

+0

感謝您的鏈接。我真的很喜歡MooTools的Class和API設計,現在閱讀這篇相當長的文章http://jqueryvsmootools.com來決定是否通過jQuery使用MooTools作爲我的項目。 – Anurag 2010-01-08 12:42:09

+0

我認爲嘗試將JavaScript強制爲經典的面向對象模型是一個錯誤。我更喜歡Crockford對JS功能的擁抱。 – Skilldrick 2010-01-08 13:43:48

+0

確實,但我只是指出,經典的OO是可行的 – 2010-01-08 14:32:51

1

」Javascript沒有接口或抽象類,恐怕我還沒有想到在原型意義上。「

你不需要無類型語言的接口。接口只允許編譯器確保對象具有某些功能,因此可以進行類型檢查。使用Javascript,你只需調用你想要和希望的方法(好吧,請確保你的部分... js不會幫助你)你調用它的對象具有該功能。