我一直试图在JS中弄清楚这个错误,并且无法理解为什么会发生这种错误。该程序应该从person对象继承属性,并添加两个附加属性,sID和课程。然后,for循环应该将用户输入的值(最少5个)推送到属性中。我遇到的问题是,一旦它到达课程属性,这是一个数组,我不断收到一个错误,说课程是未定义的。任何帮助是极大的赞赏。
// person object
var person = { firstname: "", lastname: "", email: "" };
var student = {};
student.prototype = person;
student.prototype.sid = "";
student.prototype.courses = {};
/******************************************************************************
* your code starts here
*****************************************************************************/
var answer = null;
function getanswer(string) {
answer = string;
return answer;
}
do {
getanswer(prompt("Please enter your first name, last name, student ID, email and courses (seperated by ',')"));
var array = answer.split(',');
answer = array;
for(var i = 0; i <= answer.length; i++) {
if (i < 4) {
student[i] = answer[i];
alert(student[i]);
}
if(i > 3) {
student.courses[i] = answer[i];
alert(student.courses[i]);
}
}
} while(answer !== null || answer !== "" );
答案 0 :(得分:3)
var student = {};
student.prototype = person;
您似乎正在尝试修改student
实例的原型。通常,这在JavaScript中是不可能的。 (可能有一些支持此功能的非标准API,但您不应该使用它们。)此外,对象的原型不会直接公开为对象上的公共.prototype
属性。如果你想阅读一个实例的原型,你实际上需要通过它的构造函数来查找它,如.constructor.prototype
(但不要试图修改它!)。
要使用JavaScript的原型继承,您需要创建一个构造函数,并在其上设置原型。例如,在您的情况下:
function Student() {
}
Student.prototype = person;
然后,您可以使用此构造函数创建一个Student
实例,该实例将继承person
的值:
var student = new Student;