2015-10-25 234 views
2

代码:遗漏的类型错误:方法是不是一个函数

function Hotel(name,rooms,bookings){ 

    this.name = name; 
    this.rooms = rooms; 
    this.bookings = bookings; 

    this.checkAvailability = function(){ 
     return this.rooms - this.bookings; 
    } 

    this.bookRoom = function(){ 
     if(this.checkAvailability() > 1){ 
      return this.bookings++; 
     } 
    } 

    this.cancelBooking = function(){ 
     if(this.bookings < 1){ 
      return this.bookings--; 
     } 
    } 
} 


var grandHotel = new Hotel('Hotel Grand', 20, 5); 
var addBooking = document.getElementById("book"); 

addBooking.addEventListener('click', grandHotel.bookRoom, false); 

如果我点击addBooking元素我得到这个错误:

Uncaught TypeError: this.checkAvailability is not a function.

+0

的可能的复制[如何进行 “this” 关键字的工作?](http://stackoverflow.com/questions/3127429/how-does-the-this-keyword工作) –

回答

3

您需要更改的事件是如何被约束。

addBooking.addEventListener('click', grandHotel.bookRoom.bind(grandHotel), false); 

addBooking.addEventListener('click', function() { grandHotel.bookRoom(); }, false); 
+0

非常感谢你。 现在我明白了,以为我可以直接在addEventlistener的函数参数中放置一个方法。 真心感谢您的帮助先生。 – nikodeguzman

+0

@nikodeguzman指出,通过在闭包中捕获“this”(比如'var that = this;'并使用'that'而不是this),可以更普遍地解决问题。 –

+0

@AlexeiLevenkov嗯,这里的'this'在哪里?我知道你在说什么,但在这种情况下没有这个,“这个”是'grandHotel' – epascarello

相关问题