访问数组中的对象,该对象是另一个对象(Javascript)的属性
我已经很久没有学习OOP了,而且我对JS还不熟悉,所以对于更高级的用户来说,事情可能看起来很奇怪-对不起:) 现在我创建两个对象:访问数组中的对象,该对象是另一个对象(Javascript)的属性,javascript,oop,Javascript,Oop,我已经很久没有学习OOP了,而且我对JS还不熟悉,所以对于更高级的用户来说,事情可能看起来很奇怪-对不起:) 现在我创建两个对象: startPage = new page("start"); somePage = new page("foo"); …并尝试将somePage添加到startPage中的数组中: startPage.addToSubPages(somePage); 现在这似乎不起作用了,尽管它应该是正确的,如果我没弄错的话 console.log(startPage.get
startPage = new page("start");
somePage = new page("foo");
…并尝试将somePage
添加到startPage
中的数组中:
startPage.addToSubPages(somePage);
现在这似乎不起作用了,尽管它应该是正确的,如果我没弄错的话
console.log(startPage.getSubPages());
这表明数组中有东西,但对象似乎是空的。我做错了什么?
另外:如何访问该数组中的某个元素?如下所示:startPage.getsubpage()[0].getFoo()代码>
编辑:天哪,鲭鱼,蝙蝠侠!这更像我的实际代码:
你说得对,我发布的代码确实有效。一旦继承开始发挥作用,它就不再起作用了。为什么呢?它应该像上面的代码一样工作,对吗
function page(title) {
this.title = title;
}
function subPage() {
this.contentPages = [];
}
subPage.prototype = new page;
有两个问题
您没有在子页面中调用页面
使用Child.prototype=新的父级代码>这是错误的,请使用对象。改为创建
所以固定的代码是
function page(title) {
this.title = title;
}
function subPage(title) {
page.call(this, title);
this.contentPages = [];
}
subPage.prototype = Object.create(page.prototype);
你凭什么认为这是坏的?对我有用吗<代码>控制台.log(起始页.子页[0].标题)代码>也要避免无用的代码,比如getX()
这是Java反模式。@Raynos:我不确定这是反模式。封装在JavaScript中也很有用(在野外对我也很有用)。@Matt如果有用是指浪费计算,那么是的。参见@Raynos链接的文章提到了由于不正确理解javascript作用域和创建匿名闭包作为私有数据的抽象而引起的复杂情况,而所有这些都不理解您可能正在抽象的框架的内部工作原理。我提到这一点的唯一原因是,我完全没有意识到在javascript对象上使用getter/setter级别的封装会产生有害影响。ES5-shim应该用于旧的支持。或其他类型的对象。创建垫片
function page(title) {
this.title = title;
}
function subPage(title) {
page.call(this, title);
this.contentPages = [];
}
subPage.prototype = Object.create(page.prototype);