2016-06-10 64 views
1

我有一個對象的原型3個功能:對象的原型並不承認功能

Job.prototype.postData = function(url){ 
     this.getFormData(); 
     var formdata = new FormData(); 
     formdata.append("position", this.position); 
     formdata.append("team", this.team); 
     formdata.append("details", this.details); 
     $.post(url, formdata, function(response){ 
       alert(response.message); 
       window.location.href = '/'; 
     }); 
}; 

Job.prototype.createNew = function() { 
     var newUrl = API_URL + "/add_listing"; 
     this.postData(newUrl) 
}; 

Job.prototype.update = function() { 
     var updateUrl = API_URL + "/edit_listing" + "?id=" + this.id; 
     this.postData(updateUrl) 
}; 

我附加了最後兩個事件處理回調:

$('#list-button').on('click',job.createNew); 
$('#list-button').on('click',job.update); 

這兩項的給予TypeError

oop.js:38 Uncaught TypeError: this.postData is not a function

+1

*我附加了最後兩個作爲事件處理回調。*您可能失去了上下文。嘗試將函數對象與實際的「作業」對象「綁定」爲 – thefourtheye

+0

@thefourtheye我編輯了該問題以包含該代碼。你能展示如何綁定它? – ayushgp

+0

'job.createNew.bind(job)'和'job.update.bind(job)' – thefourtheye

回答

1

的問題很簡單,就是this方面得到失去了你綁定事件處理程序的方式。

明示bind的背景下,或致電以保留上下文的方式功能:

$('#list-button').on('click', function() { job.createNew(); }); 
$('#list-button').on('click', job.createNew.bind(job)); 

How does the "this" keyword work?

+0

*這*屬於執行上下文,它不是**上下文。 ;-) – RobG