无法在javascript

时间:2017-01-23 18:28:32

标签: javascript arrays object

我在对象中有一组对象。

为什么我会收到错误'无法读取未定义的属性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

3 个答案:

答案 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;