2017-01-23 162 views
0

我有一個對象內的對象數組。無法訪問javascript中對象內數組元素的對象屬性

爲什麼我會收到錯誤'Can not read property fname of undefined'below?我如何解決它?

另外,我是新來的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 
+1

在你的例子中,AB.X是'myObj'的一個實例。我想你的意思是'var AB = new myObj();' –

回答

0

代碼示例,您還可以通過使用

var s = AB.X.X[0].fname; 
訪問
+0

謝謝。簡單的錯誤。仍然期待對代碼的其他評論。 – user3341576

+0

我剛剛給你提供了使用你的代碼的解決方案。但其他人給出的解決方案是很好的。 –

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" 
    } 
} 
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; 
+0

優秀的答案,adam davis –