Поле предупреждения Javascript не отображается - PullRequest
0 голосов
/ 20 марта 2012

В настоящее время я изучаю объектно-ориентированный 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>

Ответы [ 5 ]

2 голосов
/ 20 марта 2012

Должно быть this.subject.length вместо subject.length.

1 голос
/ 20 марта 2012

Линия:

 for(var i = 0 ; i<subject.length; i++ )

Ошибка заключалась в том, что «Тема не определена». Изменение значения subject.length = this .subject.length должно исправить вашу проблему.

Должно выдать:

Muy is teaching Obprog
0 голосов
/ 20 марта 2012

Этот код будет работать внутри вашего тега скрипта:

 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 вы использовали субъект, которого не существует, но объект вашего прототипа имеет член с именем субъекта. Таким образом, вместо i<subject.length, i<this.subject.length решает вашу проблему.

0 голосов
/ 20 марта 2012

Другие сообщили вам о причине, что не так с вашим js-кодом.

Еще одна записка от меня.

Обычно запрограммированное оповещение не появляется, когда возникает исключение.

И, кстати, ваша метка тела должна быть после закрывающей метки головы

0 голосов
/ 20 марта 2012

Вам нужно 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;
   };
...