JavaScript: создание подкласса из экземпляра суперкласса

Я довольно опытен в программировании на Javascript, но есть одна вещь, которую я не могу понять.

У меня есть суперкласс, скажем, Категория. Теперь я хочу создать несколько экземпляров подкласса, скажем, Post, внутри экземпляра Category. Я хочу, чтобы Post имел свои собственные свойства, но он также должен иметь доступ к свойствам своего родителя. Итак, вот концепция:

/* Superclass */
function Category(catID) {
    this.catID = catID;
    this.posts = [];

    this.addPost = function(id, content) {
        var post = new Post(id, content);

        post.prototype = Category;

        this.posts.push(post);
    }

    this.getPosts = function() {
        for(post in this.posts){
            this.posts[post].getContent();
        }
    }
}

/* Subclass */
function Post(postID, content) {
    this.postID = postID;
    this.content = content;

    this.getContent = function() {
        console.log('Post: '+ this.postID);
        console.log('Category: ' + this.catID);
        console.log('Content: ' + this.content);
    }
}

var cat1 = new Category(1); 
var cat2 = new Category(2);

cat1.addPost(101, 'First post in first category');
cat1.addPost(102, 'Second post in first category');
cat2.addPost(201, 'First post in second category');
cat2.addPost(202, 'Second post in second category');

cat1.getPosts();
cat2.getPosts();

Я застрял на линии post.prototype = Category. Я ожидал, что теперь Post наследует свойства Category, но этого не происходит.

Может кто-нибудь, пожалуйста, помогите мне с этим?


person Plankje    schedule 21.11.2011    source источник


Ответы (1)


В JavaScript нет классов. Прототипом объекта является другой объект. Если вы измените назначение прототипа на это, оно должно работать:

post.prototype = this;

Однако я не думаю, что это то, что вы хотите сделать. Отношения наследования в данном случае не имеют смысла. Post на самом деле не является типом Category. ИМО, я бы использовал композицию вместо наследования:

post.category = this;

Таким образом, из вашего сообщения вы сможете получить доступ к членам категории через участника категории.

person Jacob    schedule 21.11.2011
comment
Спасибо за быстрый ответ! К сожалению, использование this в этом случае не работает. - person Plankje; 21.11.2011
comment
+1. Великие умы думают одинаково. Ваш ответ совпадает с моим, но вы получили его на несколько секунд раньше. Я удалю свой ответ. - person gilly3; 21.11.2011
comment
Большое большое спасибо. Вы абсолютно правы в том, что Post не должно иметь отношений наследования с Category. Композиционная парадигма работает идеально. - person Plankje; 21.11.2011