Доступ к объекту в массиве, который является свойством другого объекта - Javascript - PullRequest
1 голос
/ 20 февраля 2012

Прошло много времени с тех пор, как я изучил ООП, и я новичок в JS, поэтому для более продвинутых пользователей все может показаться странным - извините:)

function page(title) {
    this.subPages = [];
    this.title = title;
}
page.prototype.addToSubPages = function(subPage) {
    this.subPages.push(subPage);
}
page.prototype.getSubPages = function() {
    return this.subPages;
}

Теперь я создаю 2 объекта:

startPage = new page("start");
somePage  = new page("foo");

... и попробуйте добавить somePage в массив в startPage:

startPage.addToSubPages(somePage);

Теперь это, похоже, не работает, хотя должно быть правильно, если я не ошибаюсь.

console.log(startPage.getSubPages());

Это показывает, что что-то находится в массиве, но объект кажется пустым. Что я делаю неправильно? Также: Как бы я получил доступ к определенному элементу в этом массиве? Как это: startPage.getSubPages()[0].getFoo();?

Редактировать: Святой Скумбрия, Бэтмен! Это больше похоже на мой фактический код: http://jsfiddle.net/pZHKS/2/ С вами все в порядке, код, который я разместил, на самом деле работает. Как только наследство вступает в игру, оно больше не работает. Но почему? Он должен работать точно так же, как код выше, верно?

1 Ответ

2 голосов
/ 20 февраля 2012
function page(title) {
    this.title = title;
}

function subPage() {
    this.contentPages = [];
}
subPage.prototype = new page;

Есть две проблемы.

  1. Вы не звоните page в subPage.
  2. вы используете Child.prototype = new Parent;, это неправильно, используйте Object.create вместо

Так что фиксированный код будет.

function page(title) {
    this.title = title;
}

function subPage(title) {
    page.call(this, title);
    this.contentPages = [];
}
subPage.prototype = Object.create(page.prototype);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...