我目前正在学习面向对象的Javascript,但似乎警报无效。这有什么问题?
<
html>
<head>
<script>
function professor(name, myLecture){
this.name = name;
this.myLecture = myLecture;
}
professor.prototype.display = function(){
return this.name + " is teaching " + this.myLecture;
};
function subjectList(subject){
this.subject = subject;
}
subjectList.prototype.showAll= function(){
var str = " " ;
for(var i = 0 ; i<subject.length; i++ )
str+= this.subject[i].display();
return str;
};
var ListOfSubs = new subjectList([
new professor("Muy","Obprog")
]);
alert(ListOfSubs.showAll());
</script>
<body>
</body>
</head>
</html>
答案 0 :(得分:2)
应该是this.subject.length
而不是subject.length
。
答案 1 :(得分:0)
您需要this.
subjectList.prototype.showAll= function(){
var str = " " ;
for(var i = 0 ; i< this.subject.length; i++ ) // notice this.subject
str+= this.subject[i].display();
return str;
};
答案 2 :(得分:0)
该行:
for(var i = 0 ; i<subject.length; i++ )
错误是“主题未定义”。 从subject.length = 更改此 .subject.length应该可以解决您的问题。
应输出:
Muy is teaching Obprog
答案 3 :(得分:0)
其他人已告知您js-code出现问题的原因。
我的另一个注意事项。
通常在以前发生异常时不会出现编程警报。
顺便说一句,你的身体标签应该在关闭头标签之后
答案 4 :(得分:0)
此代码适用于您的脚本标记:
function professor(name, myLecture){
this.name = name;
this.myLecture = myLecture;
}
professor.prototype.display = function(){
return this.name + " is teaching " + this.myLecture;
};
function subjectList(subject){
this.subject = subject;
}
subjectList.prototype.showAll= function(){
var str = " " ;
for(var i = 0 ; i<subject.length; i++ )
str+= this.subject[i].display();
return str;
};
var ListOfSubs = new subjectList([
new professor("Muy","Obprog")
]);
alert(ListOfSubs.showAll());
原因:在showAll函数中,您使用的是subject,这是不存在的,但原型的对象有一个名为subject的成员。因此i<subject.length
代替i<this.subject.length
,而不是解决您的问题。