[英]Can't access a object property of an array element, inside a object in javascript
我在对象内部有一个对象数组。
为什么在下面出现错误“无法读取未定义的属性fname”? 我如何解决它?
另外,我是javascript新手,不胜感激任何样式或约定的建议。
https://jsfiddle.net/go1eu9z6/
function myObj() {
this.X = [],
this.haveEntries = function() {
return this.A.length > 0;
},
this.add = function(fname_in, lname_in, city_in) {
var t = new Date().getTime() / 1000;
var obj = {
fname: fname_in,
lname: lname_in,
city: city_in,
t_create: t
};
this.X.push(obj);
return this;
}
}
var AB = {};
AB.X = new myObj();
AB.X.add("mike", 'smith', 'Toronto');
var s = AB.X[0].fname; // Error: Cannot read property fname of undefined
document.getElementById('fname').innerHTML = s
您的JavaScript代码有几个问题。 首先,您要为AB.X分配一个新Obj()的值,而不是简单地为AB。 然后,您在AB.X上调用add方法,而正确的调用将只是AB.add-请参见下面的代码示例
function myObj() {
this.X = [],
this.haveEntries = function() {
return this.A.length > 0;
},
this.add = function(fname_in, lname_in, city_in) {
var t = new Date().getTime() / 1000;
var obj = {
fname: fname_in,
lname: lname_in,
city: city_in,
t_create: t
};
this.X.push(obj);
return this;
}
}
var AB = {};
AB = new myObj();
AB.add("mike", 'smith', 'Toronto');
var s = AB.X[0].fname;
您无需将X设为myObj的实例。 实际上,这就是破坏您的代码的原因。 当创建myObject的新实例时将创建X,如下所示:
var AB = new myObject();
然后,您将在此AB对象而不是X上调用add()方法:
AB.add('mike','smith','toronto');
最后,您将得到如下结果:
var firstName = AB.X[0].fname;
但是,这只是为什么要构造此对象的一些回旋。 您如何知道哪个人的名字和信息出现在X的哪个索引处? 也许要研究使用对象通过一些密钥来存储此数据,以帮助您了解东西在哪里。 可能看起来像:
var people = {
"uniqueID": { // some uniqueID
"fname":"mike",
"lname":"smith",
"city":"toronto"
}
}
与您现有的代码,您也可以通过使用
var s = AB.X.X[0].fname;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.