我正在尝试使用对象数组创建一个对象。 例如:我想创建一个包含多个标头的Page对象。 我需要一个addHeader()和getHeaders()方法。标头本身是一个具有很少属性的对象(例如名称和标识)。我一直试图将它嵌入页面对象作为其部分,并将其添加到Headers数组(我假设它将是Page的一部分,但这可能不是理想的解决方案)。 当我尝试执行内部函数时,我遇到了麻烦。 我读了这个问题并且很少有关于这个主题的相似内容,遗憾的是我无法提出解决方案:
No ways to have class-based objects in javascript?
我最新的尝试:
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;
}) ();
当我试图运行getHeaders时:
var p = new Page(); p.getHeaders();
我明白了:
p.getHeaders is not a function
我的javascript技能相当基本,我将不胜感激任何帮助或评论。 谢谢你的回答。
有人可以向我解释如何访问内部的addHeader函数? 这是在javascript对象中嵌套函数的正确方法吗?
答案 0 :(得分:4)
您拥有它的方式,getHeaders
对于其所在的范围是私有的。要将其公开,请将其更改为:
this.getHeaders = function() {
// implementation
};
修改强>
对于你的addHeader
评论 - 如果它应该是公共函数,那么就像getHeaders
一样 - 公共函数。您可以跳过整个var header = {...};
内容 - 根据您所说的内容,您根本不需要它。您的功能可能类似于:
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;
})();
修改强>
由于您正在访问私人会员,因此prototype
内容无效。您需要将这些功能保留在内部,他们仍然可以访问headers
,或者公开headers
。我删除了答案的prototype
部分。
答案 1 :(得分:0)
你想要这样的东西:
//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 );