2017-04-23 57 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

什麼是'catalog'?它是'Book'的一個實例,它沒有'read'方法,它是爲'Patron'而不是'Book'定義的。此外,它似乎期望一個參數....調用該參數'Book'不是最好的選擇,因爲它可能被誤解爲是'Book'構造函數。僅對構造函數/類使用init-caps。 – trincot

+0

想通了,感謝幫助。 –

回答

1

的問題是,在你的問題你還沒有明確表示什麼catalog[k]是...
但是我假設它是Book型的,因爲它有一個像Available性能。
然後錯誤是有道理的,因爲您沒有爲Book定義任何方法read,您只是將其定義爲Patron

因此,你可以呼籲Patron讀功能這樣

... 
catalog[k].checkIn(); 
patrons[k].read(catalog[k]); 
...