簡體   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