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

时间:2014-10-02 21:59:56

标签: javascript

我一直试图在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 !== "" );

1 个答案:

答案 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;