Наследование в Javascript - PullRequest
       20

Наследование в Javascript

3 голосов
/ 08 января 2010

Я работаю над простой проблемой, чтобы представить несколько типов, которые имеют иерархическую структуру. Существует строка данных, которая содержит некоторые данные, и данные могут различаться в зависимости от типа строки. Простая строка может иметь только заголовок и дату, а расширенная строка может содержать заголовок, описание, дату и изображение. Я не новичок в Javascript, но не понимаю его достаточно хорошо, чтобы двигаться вперед. Чтобы привести упрощенный пример, вот как я написал бы это на Java:

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
    }
}

Есть несколько улучшений ОО, которые можно сделать здесь, таких как расширение ExtendedRow из BasicRow и определение только новых полей плюс переопределение метода getView.

Javascript не имеет интерфейсов или абстрактных классов, и я боюсь, что еще не задумался в прототипическом смысле. Итак, как я могу реализовать что-то базовое, как в приведенном выше примере в Javascript, где есть базовый класс или интерфейс и два класса, расширяющихся от этого базового класса, каждый со своим собственным специфическим поведением.

Любые указатели приветствуются.

Ответы [ 3 ]

7 голосов
/ 08 января 2010

Взгляните на статьи Дугласа Крокфорда:

Дуглас Крокфорд - старший JavaScript-архитектор в Yahoo! Он хорошо известен своей работой по внедрению Нотация объектов JavaScript (JSON) - Википедия

Эти статьи , которые необходимо прочитать, , и я уверен, что они помогут вам понять, как структурировать ваши объекты.

2 голосов
/ 08 января 2010

Взгляните на статью Джона Резига о наследовании в Javascript . Работа Ресига, а также Mootools.class (часть библиотеки Mootools ) являются производными от Base.js Дина Эдварда

Надеюсь, это поможет.

1 голос
/ 08 января 2010

«У Javascript нет интерфейсов или абстрактных классов, и я боюсь, что я еще не задумался в прототипическом смысле».

Вам не нужны интерфейсы на типизированных языках. Интерфейсы просто позволяют компилятору убедиться, что объект обладает определенной функциональностью, чтобы он мог проверить тип. С Javascript вы просто вызываете нужный метод и надеетесь (ну, убедитесь, что с вашей стороны ... JS вам не поможет), что объект, к которому вы его вызываете, обладает такой функциональностью.

...