2016-06-10 62 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