我有一個問題,關於在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