关于给定TypeError的对象函数的初学者javascript

关于给定TypeError的对象函数的初学者javascript,javascript,Javascript,我希望成绩册对象中的addScore附加传递到分数数组中的分数。 然而,它给了我一个错误 TypeError:无法读取未定义的属性“testScore” var students = ["Joseph", "Susan", "William", "Elizabeth"]; var scores = [ [80, 70, 70, 100], [85, 80, 90, 90], [75, 70, 80, 75],

我希望成绩册对象中的addScore附加传递到分数数组中的分数。 然而,它给了我一个错误

TypeError:无法读取未定义的属性“testScore”

var students = ["Joseph", "Susan", "William", "Elizabeth"];

var scores = [ [80, 70, 70, 100],
               [85, 80, 90, 90],
               [75, 70, 80, 75],
               [100, 90, 95, 85] ];


var gradebook = {
  joseph:{testScore:scores[0]},
  susan:{testScore:scores[1]},
  william:{testScore:scores[2]},
  elizabeth:{testScore:scores[3]},
  addGrade:function(stu_name,grade) {
    gradebook.stu_name.testScore.push(grade);
  }
};

//test call
gradebook.addGrade("susan",100);
console.log(gradebook.susan.testScore); //should display [85 80 90 90 100]
动态属性名不能使用“点”符号。但您可以使用括号表示法:

gradebook["joseph"]
// is equivalent to
gradebook.joseph
…但括号中的表达式可以是一个变量,其计算结果可以是一个带有属性名称的字符串:

var p = "joseph";
gradebook[p]
因此,对于您的
addGrade()
函数,请尝试以下操作:

addGrade:function(stu_name,grade) {
  gradebook[stu_name].testScore.push(grade);
}    
使用以下命令:

var gradebook = {
  joseph:{testScore:scores[0]},
  susan:{testScore:scores[1]},
  william:{testScore:scores[2]},
  elizabeth:{testScore:scores[3]},
  addGrade:function(stu_name,grade) {
    gradebook[stu_name].testScore.push(grade);
  }
};

数组索引使用方括号,请尝试:

gradebook[stu_name].testScore.push(grade);

非常感谢这帮了大忙