我在对象中有一组对象。
为什么我会收到错误'无法读取未定义的属性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
答案 0 :(得分:1)
您的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;
答案 1 :(得分:0)
您不需要将X作为myObj的实例。事实上,那是什么打破了你的代码。创建myObject的新实例时会创建X,如下所示:
var AB = new myObject();
然后你将在这个AB对象上调用你的add()方法,而不是在X:
AB.add('mike','smith','toronto');
最后,你会得到这样的结果:
var firstName = AB.X[0].fname;
这有点圆 - 关于构造这个对象的原因。你怎么知道哪个人的姓名和信息出现在X的哪个指数?也许考虑使用一个对象来存储这些数据与一些键,可以帮助你知道什么是东西。可能看起来像:
var people = {
"uniqueID": { // some uniqueID
"fname":"mike",
"lname":"smith",
"city":"toronto"
}
}
答案 2 :(得分:0)
使用现有代码,您也可以使用
访问它var s = AB.X.X[0].fname;