我將在JavaScript中有大量的對象,其在頁面上的可視表示將作爲div(divs將顯示和隱藏,具體取決於鼠標位置)。單擊元素上的監聽器與onclick元素(函數關閉與對象索引查找)
要與對象進行交互,我試圖決定在點擊偵聽器之間添加<button>
元素(或帶有onclick屬性的其他元素)或<div>
。
與點擊偵聽器一起使用<div>
的優點在於,回調函數(即click處理函數)將在與其可視表示(父div)對應的對象上具有閉包。因此,當我點擊時,它知道我正在與哪個對象進行交互。
使用<button>
元素(或具有onclick
屬性的其他DOM元素)的優點是該頁面註冊的聽衆較少。但是使用<button>
元素的缺點是其點擊處理函數而不是在對象上有閉包,因此引用正確對象的唯一方法是通過某種索引,其中每個對象都擁有唯一的名稱。只有2個對象爲例(我將在我的網頁更多):
var arrayOfObjects = [];
var anObj = {
// some info about object
this.indxInArray = arrayOfObjects.push(this);
this.clickFunction = function() {
// insert logic for click listener...
};
var that = this;
this.theButton = $("<button type='button' onclick='arrayOfObjects["that.indxInArray"].clickFunction");
$('anObj').append(that.theButton);
}
var anotherObj = {
// some info about object
this.indxInArray = arrayOfObjects.push(this);
this.clickFunction = function() {
// insert logic for click listener...
};
var that = this;
this.theButton = $("<button type='button' onclick='arrayOfObjects["that.indxInArray"].clickFunction");
$('anotherObj').append(that.theButton);
}
// ... HTML stuff:
<div id='anObj'>
</div>
<div id='anotherObj'>
</div>
按鈕的方式似乎是指在DOM的JavaScript對象的骯髒和單調乏味的方式,但它確實節省了一大堆點擊偵聽器。
我的問題是:是否有很多註冊事件監聽器顯着降低性能?當保存註冊元素的父元素被隱藏時,此性能影響會消失嗎?
我使用的onclick按鈕,這不會給我關閉對象。如果我在其他元素(如div)上使用onclick,會出現同樣的問題。 – achow