我有一个问题,关于在javascript函数对象中使用javascript“this”关键字。我希望能够创建一个对象来处理模式弹出(JQuery UI对话框)。Javascript函数对象,这个关键字指向错误的对象
该对象称为CreateItemModal。我希望能够实例化并传递一些配置设置。其中一个配置设置。当调用show方法时,将显示对话框,但取消按钮不起作用,因为它引用DOM对象而不是CreateItemModal对象。
我该如何解决这个问题,或者是否有更好的方法将单独的行为放在单独的“类”或“对象”中。我尝试了几种方法,包括将“this”对象传入事件中,但这不像是一个干净的解决方案。
见(简体)下面的代码:
function CreateItemModal(config) {
// initialize some variables including $wrapper
};
CreateItemModal.prototype.show = function() {
this.$wrapper.dialog({
buttons: {
// this crashes because this is not the current object here
Cancel: this.close
}
});
};
CreateItemModal.prototype.close = function() {
this.config.$wrapper.dialog('close');
};
这个工作,但是这是“最佳实践”?看起来像是一个很大的开销,让JavaScript看到这是一个真正的“OO”对象? – 2010-03-22 09:15:56
那么,那是因为你使用的是jQuery,而jQuery并不能帮助你编写那种javascript。对于大多数其他框架,您只需编写'Cancel:this.close.bind(this)' – Alsciende 2010-03-22 09:20:41
@Rody:这是唯一的做法。 ECMAScript第5版引入了函数原型方法'bind',它可以让你做这样的事情:'取消:this.close.bind(this);'。如果你必须在你的代码中多次执行这样的事情,那么在Web上有'bind'原型的实现。 – 2010-03-22 09:22:15