为什么我一直收到一个错误,说对象属性未定义

Why do I keep getting an error saying an object property is undefined?

本文关键字:错误 一个 对象 未定义 属性 一直 为什么      更新时间:2023-09-26

我一直在试图找出JS中的这个错误,但不明白为什么会发生。该程序应该继承person对象的属性,并添加两个额外的属性,sID和courses。然后,for循环应该将用户输入的值(最小值为5)推送到属性中。然而,我遇到的问题是,一旦它到达courses属性(一个数组),我就会不断收到一个错误,说courses是未定义的。非常感谢您的帮助。

    // 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 !== "" );
var student = {};
student.prototype = person;

您似乎在尝试在创建student实例的原型之后对其进行修改。一般来说,这在JavaScript中是不可能的。(可能有一些非标准API支持这一点,但您不应该使用它们。)此外,对象的原型不会直接作为对象上的公共.prototype属性公开。如果你想读取一个实例的原型,你实际上需要通过它的构造函数.constructor.prototype来查找它(但不要试图修改它!)。

要使用JavaScript的原型继承,您需要创建一个构造函数,并在此基础上设置原型。例如,在您的案例中:

function Student() {
}
Student.prototype = person;

然后,您可以使用此构造函数创建一个Student实例,该实例将继承person:的值

var student = new Student;
相关文章: