Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象和相应函数的嵌套数组_Javascript - Fatal编程技术网

Javascript 对象和相应函数的嵌套数组

Javascript 对象和相应函数的嵌套数组,javascript,Javascript,我正在尝试创建一个具有对象数组的对象。 我想创建一个具有多个标题的页面对象。 我需要一个addHeader()和getHeaders()方法。标头本身是一个几乎没有属性(例如名称和id)的对象。我一直试图将它嵌套在page对象中作为它的一部分,并将其添加到一个标题数组中(我假设它是page的一部分,但这可能不是理想的解决方案)。 我在尝试执行内部函数时遇到了麻烦。 我读过这个问题,几乎没有关于这个话题的类似问题,不幸的是,我想不出一个解决方案: 我最新的尝试: var Page = ( fun

我正在尝试创建一个具有对象数组的对象。 我想创建一个具有多个标题的页面对象。 我需要一个addHeader()和getHeaders()方法。标头本身是一个几乎没有属性(例如名称和id)的对象。我一直试图将它嵌套在page对象中作为它的一部分,并将其添加到一个标题数组中(我假设它是page的一部分,但这可能不是理想的解决方案)。 我在尝试执行内部函数时遇到了麻烦。 我读过这个问题,几乎没有关于这个话题的类似问题,不幸的是,我想不出一个解决方案:

我最新的尝试:

var Page = ( function () {
    function Page() {
        var headers = [];
        var header = {
            name:'',
            id:'',
            addHeader : function(name,id) {
                this.name = name;
                this.id = id;
                Page.headers.push(header);
            }
        };
        this.getHeaders = function() {
            for(var i=0; i< Page.headers.length; i++) {
                console.log(Page.headers[i]);
            }
        } 
    }
    return Page;
}) ();
我得到:

p.getHeaders不是一个函数

我的javascript技能相当基础,如果有任何帮助或意见,我将不胜感激。 谢谢你的回答

有人能给我解释一下如何访问内部addHeader函数吗?
这是在javascript对象中嵌套函数的正确方法吗?

按照您的方式,
getHeaders
对它所在的范围是私有的。若要将其公开,请将其更改为:

this.getHeaders = function() {
    // implementation
};
编辑

对于您的
addHeader
注释-如果这应该是一个公共函数,那么只需执行与
getHeaders
相同的操作-一个公共函数。您可以跳过整个
var头={…}东西-根据你所说的,你根本不需要它。您的函数可以如下所示:

var Page = (function () {
    function Page() {
        var headers = [];

        this.getHeaders = function () {
            for (var i = 0; i < headers.length; i++) {
                console.log(headers[i]);
            }
        };
        this.addHeader = function (name, id) {
            headers.push({ name: name, id: id });
        };
    }

    return Page;
})();
var Page=(函数(){
功能页(){
var头=[];
this.getHeaders=函数(){
对于(变量i=0;i
编辑


prototype
东西将无法工作,因为您正在访问一个私有成员。您需要将这些函数放在内部,它们仍然可以访问
标题
,或者将
标题
公开。我已经删除了答案的
原型
部分。

按照您的方式,
getHeaders
对其所在的范围是私有的。若要将其公开,请将其更改为:

this.getHeaders = function() {
    // implementation
};
编辑

对于您的
addHeader
注释-如果这应该是一个公共函数,那么只需执行与
getHeaders
相同的操作-一个公共函数。您可以跳过整个
var头={…}东西-根据你所说的,你根本不需要它。您的函数可以如下所示:

var Page = (function () {
    function Page() {
        var headers = [];

        this.getHeaders = function () {
            for (var i = 0; i < headers.length; i++) {
                console.log(headers[i]);
            }
        };
        this.addHeader = function (name, id) {
            headers.push({ name: name, id: id });
        };
    }

    return Page;
})();
var Page=(函数(){
功能页(){
var头=[];
this.getHeaders=函数(){
对于(变量i=0;i
编辑


prototype
东西将无法工作,因为您正在访问一个私有成员。您需要将这些函数放在内部,它们仍然可以访问
标题
,或者将
标题
公开。我已经删除了答案的
原型部分。

您希望这样:

//create a page object 'class'
function Page(){
  this.headers = [];          
};
//add functions to the page object
Page.prototype.addHeader = function(header){ this.headers.push(header); }
Page.prototype.getHeaders = function(){ return this.headers; }

function Header(opt){
  this.name = opt.name || ""; //default to empty string
  this.id = opt.id || null; //default to null id
}

//use it like so
Header header1 = new Header("title1","title1ID");
Page firstPage = new Page();
firstPage.addHeader( header1 );

你想要这样的东西:

//create a page object 'class'
function Page(){
  this.headers = [];          
};
//add functions to the page object
Page.prototype.addHeader = function(header){ this.headers.push(header); }
Page.prototype.getHeaders = function(){ return this.headers; }

function Header(opt){
  this.name = opt.name || ""; //default to empty string
  this.id = opt.id || null; //default to null id
}

//use it like so
Header header1 = new Header("title1","title1ID");
Page firstPage = new Page();
firstPage.addHeader( header1 );

他可能不想让标题公开。是的,我宁愿让标题保持私有,但是如果没有其他方法,我愿意放弃这个想法。他可能不想让标题公开。是的,我宁愿让标题保持私有,但是如果没有其他方法,我愿意放弃这个想法。
this.getHeaders=function()
-假设在问题的代码中替换了
函数getHeaders()
,这难道不会使
getHeaders
成为全局对象的方法吗?非常感谢。getHeaders现在可以工作了。我的头有问题。我再次得到相同的错误:p.addHeader(…)不是function@PaulD.Waite问题中的缩进有点偏离-
getHeaders
位于内部函数中,因此它位于正确的位置。我编辑了缩进,这样更容易看到。@JoeEnos:太好了,谢谢你,你帮我节省了好几个小时。向上投票并接受。
this.getHeaders=function()
-假设替换了问题代码中的
function getHeaders()
,这不会使
getHeaders
成为全局对象的方法吗?非常感谢。getHeaders现在可以工作了。我的头有问题。我再次得到相同的错误:p.addHeader(…)不是function@PaulD.Waite问题中的缩进有点偏离-
getHeaders
位于内部函数中,因此它位于正确的位置。我编辑了缩进,这样更容易看到。@JoeEnos:太好了,谢谢你,你帮我节省了好几个小时。投票通过并被接受。