我有一个包含数组的对象的对象。我想循环浏览它们。对于vocab
中的subjects
对象,parseHoveredText()的log("log: " + obj + ", " + vocab[obj][word.toLowerCase()][0]);
工作正常。无法读取对象对象的属性'0'
输出:log subjects, You
但对于其他的对象,如nouns
,verbs
,等等,log("log: " + obj + ", " + vocab[obj][word.toLowerCase()][0]);
给出:
输出:Cannot read property '0' of undefined
我不明白那是怎么回事可能。如果我把'má' : ['Hemp', path+n+'Ma2_Hemp.mp3'],
放在subjects
的对象内,它可以正常工作......所以我认为循环有问题。
所以,如果我改变log
到log("log: " + obj + ", " + vocab[obj][word.toLowerCase()]);
:
输出:
log: subjects, undefined
log: nouns, Mother,recordings/nouns/Ma1_Mother.mp3
log: verbs, undefined
log: measure, undefined
log: adjectives, undefined
log: adverbs, undefined
log: prepositions, undefined
log: particles, undefined
log: suffix, undefined
所以它是从其他对象查找键,你可以看到它从Nouns
返回Mother
。
代码:
var path = 'recordings/';
var sbj = 'subjects/';
var n = 'nouns/';
var vocab =
{
"subjects" :
{
'wǒ' : ['I/Me', path+sbj+'Wo_I.mp3'],
'nǐ' : ['You', path+sbj+'Ni_You.mp3'],
'tā' : ['Him/Her', path+sbj+'Ta_him.mp3'],
'shuí' : ['Who', path+sbj+'Shui_Who.mp3']
},
"nouns" :
{
'xièxiè': ['Thanks', path+n+'Xiexie4_Thanks.mp3'],
'duì' : ['Correct/at/facing', path+n+'Dui4_Facing.mp3'],
'má' : ['Hemp', path+n+'Ma2_Hemp.mp3'],
etc...
function parseHoveredText (word, audio) {
for (obj in vocab) {
log("log: " + obj + ", " + vocab[obj][word.toLowerCase()][0]);
if(audio) {
return vocab[obj][word.toLowerCase()][1];
}
return vocab[obj][word.toLowerCase()][0];
}
}
你有扩展'Object.prototype'? –
@cookiemonster这是做什么,我将如何扩展它? – Growler
使每个对象都继承该属性。它可能以各种方式导致问题,例如枚举对象的属性时。你给'parseHoveredText()'的参数是什么? –