繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM