2017-04-23 20 views
2

ループ内でプロトタイプ関数を呼び出すとエラーが発生します。Javascript:forループを呼び出すときに関数エラーが発生しない

クラス

var Book = function(title, Available, publicationDate, checkoutDate, callNumber, Authors) { 
    this.title = title; 
    this.Available = false; 
    this.publicationDate = new Date(); 
    this.checkoutDate = checkoutDate; 
    this.callNumber = 690080; 
    this.Authors = Authors; 
}; 

他のクラスはbooksOut配列プロパティを持つ

var Patron = function(firstName, lastName, libCardNum, booksOut, fine) { 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.libCardNum = libCardNum; 
    this.booksOut = []; 
    this.fine = 0.00; 
}; 

守護クラスの配列プロパティに本を追加することになっているプロトタイプ

Patron.prototype.read = function(Book) { 
    this.booksOut.add(Book); 
} 

TypeError:catalog [k] .readの原因となるループは、かっこがないと、常に同じ出力が得られます。

for (var i = 0; i < 90; i++) { 
    for (var j = 0; j < catalog.length; j++) { 
     for (var k = 0; k < patrons.length; k++) { 
      var fine = patrons[k].fine; 
      if (catalog[k].Available) { 
       catalog[k].checkOut(); 
      } else { 
       catalog[k].checkIn(); 
       catalog[k].read(); 
       if (catalog[k].isOverdue()) { 
        fine = fine + 5.00; 
       } 
      } 
      patrons[k].fine = fine; 
     } 
    } 
} 

ご協力いただければ幸いです。

+3

ようPatronの読み取り機能を呼び出すことができますか?それは 'Book'のインスタンスで、' Book'ではなく 'Patron'のために定義された' read'メソッドを持っていません。また、それは引数を期待しているようです....そのパラメータ 'Book'を呼び出すことは、' Book'コンストラクタとして誤解される可能性があるため、最良の選択ではありません。 init-capsは、コンストラクタ/クラスに対してのみ使用してください。 – trincot

+0

それを見て、助けていただきありがとうございます。 –

答えて

1

問題は...あなたの質問にあなたはcatalog[k]が何であるかを明記していないということです
しかし、それはAvailableのような性質を持っているので、私は、それがタイプBookであると仮定しています。
Bookのメソッドreadが定義されていないため、エラーが発生した場合は、Patronに定義しました。

したがって、あなたは `catalog`はどのようなものです。この

... 
catalog[k].checkIn(); 
patrons[k].read(catalog[k]); 
... 
関連する問題