如果setOnclick
是很好的實施,你應該能夠做到:
bt.setOnclick(function() {
alert(this.name + " clicks = " + this.cntClick);
this.onclick = this.cntClick + 1;
});
否則,你需要創建一個新的範圍爲每個回調函數,讓他們每個人都有自己bt
。要做到這一點的方法之一是:
bt.setOnclick(function(bt){
return function(){
alert(bt.name + " clicks = " + bt.cntClick);
bt.onclick = bt.cntClick + 1;
};
}(bt));
評論響應
爲了實現setOnClick這樣this
指有關HrButton
(而非element
)的回調中,你可以使用下面的代碼(工作在現代瀏覽器只,unless you SHIM bind):
var self = this;
self.setOnClick = function(fnOnClick) {
element.onclick = fnOnClick.bind(self);
};
由於您使用jQuery下面的代碼無線會是一個跨瀏覽器相當於:
var self = this;
self.setOnClick = function(fnOnClick) {
element.onclick = $.proxy(fnOnClick, self);
};
否則這將在所有的瀏覽器,無需任何庫,且僅略少可讀性:
var self = this;
self.setOnClick = function(fnOnClick) {
element.onclick = function(event) {
return fnOnClick.call(self, event);
};
};
究竟是你想做些什麼? – NullUserException
你不需要最終的。因爲塊不會在JS中創建範圍,所以需要一個閉包來正確限定'for'迭代中的'bt'的範圍。 –
你需要什麼,你想保持第三個變量?爲了什麼 ? –