无法访问javascript中对象内部的数组元素的对象属性

无法访问javascript中对象内部的数组元素的对象属性,javascript,arrays,object,Javascript,Arrays,Object,我在一个对象中有一个对象数组 为什么会出现下面的错误“无法读取未定义的属性fname”?我怎么修理它 另外,我对javascript还不熟悉,如果有任何样式或惯例方面的建议,我将不胜感激 您不需要将X作为myObj的实例。事实上,这就是破坏你的代码的原因。创建myObject的新实例时会创建X,如下所示: var AB = new myObject(); var firstName = AB.X[0].fname; 然后,您将在此AB对象上而不是在X上调用add方法: AB.add('mik

我在一个对象中有一个对象数组

为什么会出现下面的错误“无法读取未定义的属性fname”?我怎么修理它

另外,我对javascript还不熟悉,如果有任何样式或惯例方面的建议,我将不胜感激


您不需要将X作为myObj的实例。事实上,这就是破坏你的代码的原因。创建myObject的新实例时会创建X,如下所示:

var AB = new myObject();
var firstName = AB.X[0].fname;
然后,您将在此AB对象上而不是在X上调用add方法:

AB.add('mike','smith','toronto');
最后,您将得到如下结果:

var AB = new myObject();
var firstName = AB.X[0].fname;
不过,这是关于为什么要构造这个对象的一个小问题。你怎么知道哪个人的名字和信息出现在X的哪个索引中?也许可以考虑使用一个对象来存储这些数据,并使用一些键来帮助您知道东西在哪里。可能看起来像:

var people = {
    "uniqueID": {            // some uniqueID
       "fname":"mike",
       "lname":"smith",
       "city":"toronto"
    }
}

您的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; 

使用现有代码,您还可以使用

var s = AB.X.X[0].fname;

在您的示例中,AB.X是myObj的一个实例。我想你的意思是var AB=新的myObj;谢谢简单的错误。仍然期待着对代码的其他评论。我只是使用您的代码为您提供了解决方案。但其他人给出的解决方案是好的。