JavaScript中自訂事件用法分析_javascript技巧
本文實例講述了JavaScript中自訂事件用法。分享給大家供大家參考。具體分析如下:
在web前端開發中,很多人可能不會用到js的自訂事件,但如果是做一個相對來說比較大的項目,尤其是多人協同開發的時候,自訂事件就顯得很重要了。那麼,什麼是js中的自訂事件呢?我們先來看一個例子:
前端開發員A封裝了一個函數:
alert(a); //以此代表N行程式碼
}
過段時間,前端開發員B要在A的基礎上豐富這個函數,於是,他會這樣寫:
alert(a); //以此代表N行程式碼
alert(b); //以此代表N行程式碼
}
是不是發現了問題,B要注意和A的變數、函數等等的命名和衝突問題,又過段時間,前端開發員C也要豐富這個函數,於是:
alert(a); //以此代表N行程式碼
alert(b); //以此代表N行程式碼
alert(c); //以此代表N行程式碼
}
這時候會很令人抓狂了,C寫起程式碼來我敢肯定不會很輕鬆。解決這個問題的方法是透過自訂事件,我們知道一個元素身上可以添加相同的事件而不會各自影響,如:
alert(1);
} ,false);
window.addEventListener('click',function(){
alert(2);
} ,false);
點擊頁面的時候,1和2都會彈出,那我們就可以用這種方法定義我們的函數:
alert(3);
} ,false);
window.addEventListener('move',function(){
alert(4);
} ,false);
這樣,我們執行move();的時候就會彈出3和4,這裡的move就是自訂事件,它其實就是一個函數
下面看看如何給事件處理程序傳遞參數:
function createFunction(obj, strFunc) {
var args = []; //定義args 用於儲存傳遞給事件處理程序的參數
if (!obj) obj = window; //如果是全域函數則obj=window;
//得到傳遞給事件處理程序的參數
for (var i = 2; i //用無參數函數封裝事件處理程序的呼叫
return function() {
obj[strFunc].apply(obj, args); //傳遞參數給指定的事件處理程序
}
}
function class1() {
}
class1.prototype = {
show: function() {
this.onShow();
},
onShow: function() { }
}
function objOnShow(userName) {
alert("hello," userName);
}
function test() {
var obj = new class1();
var userName = "test";
obj.onShow = createFunction(null, "objOnShow", userName);
obj.show();
}
"因為事件機制只傳遞一個函數的名稱,不帶有任何參數的信息,所以無法傳遞參數進去",這是後話了,「要解決這個問題,可以從相反的思路去考慮,不考慮怎麼把參數傳進去,而是考慮如何建立一個無需參數的事件處理程序,該程序是根據有參數的事件處理程序創建的,是一個外層的封裝。函數,它巧妙地利用apply函數將帶參數的函數封裝為無參數函數。最後我們來看看如何實作自訂事件的多重綁定:
//將有參數的函數封裝為無參數的函數
function createFunction(obj, strFunc) {
var args = []; //定義args 用於儲存傳遞給事件處理程序的參數
if (!obj) obj = window; //如果是全域函數則obj=window;
//得到傳遞給事件處理程序的參數
for (var i = 2; i //用無參數函數封裝事件處理程序的呼叫
return function() {
obj[strFunc].apply(obj, args); //傳遞參數給指定的事件處理程序
}
}
function class1() {
}
class1.prototype = {
show: function() {
if (this.onShow) {
for (var i = 0; i this.onShow[i]();
}
}
},
attachOnShow: function(_eHandler) {
if (!this.onShow) { this.onShow = []; }
this.onShow.push(_eHandler);
}
}
function objOnShow(userName) {
alert("hello," userName);
}
function objOnShow2(testName) {
alert("show:" testName);
}
function test() {
var obj = new class1();
var userName = "your name";
obj.attachOnShow(createFunction(null, "objOnShow", userName));
obj.attachOnShow(createFunction(null, "objOnShow2", "test message"));
obj.show();
}
我們看到,attachOnShow方法實現的基本思想是對數組的push操作,其實我們還可以在事件執行完成之後,移除事件處理函數,下面單獨實現:
function createFunction(obj, strFunc) {
var args = []; //定義args 用於儲存傳遞給事件處理程序的參數
if (!obj) obj = window; //如果是全域函數則obj=window;
//得到傳遞給事件處理程序的參數
for (var i = 2; i //用無參數函數封裝事件處理程序的呼叫
return function() {
obj[strFunc].apply(obj, args); //傳遞參數給指定的事件處理程序
}
}
function class1() {
}
class1.prototype = {
show: function() {
if (this.onShow) {
for (var i = 0; i this.onShow[i]();
}
}
},
attachOnShow: function(_eHandler) { // 附加事件
if (!this.onShow) { this.onShow = []; }
this.onShow.push(_eHandler);
},
detachOnShow: function(_eHandler) { // 移除事件
if (!this.onShow) { this.onShow = []; }
this.onShow.pop(_eHandler);
}
}
function objOnShow(userName) {
alert("hello," userName);
}
function objOnShow2(testName) {
alert("show:" testName);
}
function test() {
var obj = new class1();
var userName = "your name";
obj.attachOnShow(createFunction(null, "objOnShow", userName));
obj.attachOnShow(createFunction(null, "objOnShow2", "test message"));
obj.show();
obj.detachOnShow(createFunction(null, "objOnShow", userName));
obj.show(); // 移除一個,顯示剩餘的一個
obj.detachOnShow(createFunction(null, "objOnShow2", "test message"));
obj.show(); // 兩個都移除,一個也不顯示
}
希望本文所述對大家的javascript程式設計有所幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Netflix上的頭像是你串流媒體身分的視覺化代表。使用者可以超越預設的頭像來展現自己的個性。繼續閱讀這篇文章,了解如何在Netflix應用程式中設定自訂個人資料圖片。如何在Netflix中快速設定自訂頭像在Netflix中,沒有內建功能來設定個人資料圖片。不過,您可以透過在瀏覽器上安裝Netflix擴充功能來實現此目的。首先,在瀏覽器上安裝Netflix擴充功能的自訂個人資料圖片。你可以在Chrome商店買到它。安裝擴充功能後,在瀏覽器上開啟Netflix並登入您的帳戶。導航至右上角的個人資料,然後點擊

如何在Eclipse中自訂快捷鍵設定?身為開發人員,在使用Eclipse進行編碼時,熟練快捷鍵是提高效率的關鍵之一。 Eclipse作為一個強大的整合開發環境,不僅提供了許多預設的快捷鍵,還允許使用者根據自己的偏好進行個人化的客製化。本文將介紹如何在Eclipse中自訂快捷鍵設置,並給出具體的程式碼範例。打開Eclipse首先,打開Eclipse,並進入

JSP註解的分類及用法解析JSP註解分為兩種:單行註解:以結尾,只能註解單行程式碼。多行註解:以/*開頭,以*/結尾,可以註解多行程式碼。單行註解範例多行註解範例/**這是一段多行註解*可以註解多行程式碼*/JSP註解的用法JSP註解可以用來註解JSP程式碼,使其更易於閱

1.下圖是edius預設的螢幕佈局,預設的EDIUS視窗佈局是橫向版式,因此在單一顯示器環境中,許多視窗是重疊在一起的,且預覽視窗為單一視窗模式。 2、您可以透過【檢視】選單列啟用【雙視窗模式】,使預覽視窗同時顯示播放視窗和錄製視窗。 3.您可以透過【檢視功能表列>視窗佈局>常規】來恢復預設螢幕佈局。另外您也可以自訂適合您的佈局方式,並儲存為常用螢幕佈局:將視窗拖曳成適合自己的佈局,然後點擊【檢視>視窗佈局>儲存目前佈局>新建】,在彈出的【儲存目前佈局】小視窗中輸入佈局名稱,按確定

WPS是一款常用的辦公室軟體套件,其中的WPS表格功能被廣泛用於資料處理和計算。在WPS表格中,有一個非常有用的函數,即DATEDIF函數,它用於計算兩個日期之間的時間差。 DATEDIF函數是英文單字DateDifference的縮寫,它的語法如下:DATEDIF(start_date,end_date,unit)其中,start_date表示起始日期

c語言exit函數怎麼用,需要具體程式碼範例在C語言中,我們常常需要在程式中提前終止程式的執行,或是在某個特定的條件下退出程式。 C語言提供了exit()函數來實作這個功能。本文將介紹exit()函數的用法,並提供對應的程式碼範例。 exit()函數是C語言中的標準函式庫函數,它包含在頭檔中。它的作用是終止程式的執行,並且可以帶一個整數

MySQL中的ISNULL()函數是用來判斷指定表達式或列是否為NULL的函數。它傳回一個布林值,如果表達式為NULL則回傳1,否則回傳0。 ISNULL()函數可以在SELECT語句中使用,也可以在WHERE子句中進行條件判斷。 1.ISNULL()函數的基本語法:ISNULL(expression)其中,expression是要判斷是否為NULL的表達式或

在excel表格中,有時候可能需要插入座標軸,能夠更直觀地看到資料的變化趨勢。還有些小夥伴不清楚怎麼在表中插入座標軸,接下來小編就跟大家分享一下excel自訂座標軸刻度的方法吧。 座標軸插入方法: 1、在excel介面中,選取資料。 2、在插入介面中,點選插入長條圖或長條圖。 3、在展開的介面中,選擇形圖類型。 4、在表格右鍵介面中,點選選擇資料。 5、在展開的介面中,進行自訂即可。
