访问数组中的对象,它是另一个对象的属性 - Javascript

时间:2012-02-20 15:31:05

标签: javascript oop

自从我学习OOP并且我是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 个答案:

答案 0 :(得分:2)

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

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

有两个问题。

  1. 您未在page中致电subPage
  2. 您使用Child.prototype = new Parent;这是错误的,请使用Object.create而不是
  3. 所以固定代码就是。

    function page(title) {
        this.title = title;
    }
    
    function subPage(title) {
        page.call(this, title);
        this.contentPages = [];
    }
    subPage.prototype = Object.create(page.prototype);