2010-01-08 5 views
3

Je travaille sur un problème simple pour représenter quelques types qui ont une structure hiérarchique. Une ligne de données contient des données et les données peuvent varier d'un type de ligne à un autre. Une rangée simple peut seulement avoir un titre et une date, alors qu'une rangée prolongée peut contenir un titre, une description, une date et une image. Je ne suis pas novice en Javascript mais je ne le comprends pas assez bien pour aller de l'avant. Pour donner un exemple simplifié, voici comment je l'écrire en Java:Héritage en 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 
    } 
} 

Il y a quelques améliorations OO qui peut être fait ici tels que l'extension ExtendedRow de BasicRow et définir uniquement les nouveaux champs ainsi que redéfinissant la méthode getView .

Javascript n'a pas d'interfaces ou de classes abstraites et je crains de ne pas avoir encore réfléchi dans un sens prototypique. Alors comment pourrais-je implémenter quelque chose d'aussi basique que l'exemple ci-dessus en Javascript où il y a une classe de base ou une interface, et deux classes s'étendant de cette classe de base, chacune avec leur propre comportement spécifique.

Les pointeurs sont grandement appréciés.

Répondre

7

Jetez un coup d'oeil aux articles de Douglas Crockford:

Douglas Crockford est un haut architecte JavaScript chez Yahoo Il est bien connu pour son travail dans l'introduction JavaScript Object Notation (JSON) - vous Wikipedia

Ces articles sont doivent-lit, et je suis ils vous aider à comprendre comment structurer votre objets.

+1

ceux qui étaient tous en effet de bonnes lectures ..il faut un changement majeur dans la pensée et je suppose que je vais hacker les détails mineurs toute la journée, mais ces liens ont vraiment aidé à éclaircir beaucoup de doutes – Anurag

+0

Heureux que cela a fonctionné pour vous. J'ai eu à peu près la même expérience en lisant ces trois articles la première fois :) – roosteronacid

2

Jetez un oeil à John Resig's article on inheritance in Javascript. Le travail de Resig et aussi Mootools.class (une partie de la bibliothèque Mootools) sont tous les deux dérivés du travail de Dean Edward Base.js

Hope that helps.

+0

merci pour les liens. J'aime vraiment la conception de Class et d'API de MooTools en général, et lire cet article plutôt long maintenant http://jqueryvsmootools.com pour décider si utiliser MooTools sur jQuery pour mon projet. – Anurag

+0

Je pense que c'est une erreur d'essayer de forcer JavaScript dans un moule classique OO. Je préfère que Crockford embrasse les caractéristiques de JS. – Skilldrick

+0

en effet, mais je viens de souligner que OO classique est possible –

1

"Javascript n'a pas d'interfaces ou de classes abstraites et je crains de ne pas avoir encore pensé à un concept prototypique".

Vous n'avez pas besoin d'interfaces dans les langues sans typage. Les interfaces permettent juste au compilateur de s'assurer qu'un objet a certaines fonctionnalités, de sorte qu'il puisse correspondre. Avec Javascript, vous appelez simplement la méthode que vous voulez et espérez (bien, assurez-vous de votre part ... je ne vous aiderai pas) que l'objet sur lequel vous l'appelez a cette fonctionnalité.