第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

細(xì)說(shuō)JavaScript事件編碼維護(hù)

標(biāo)簽:
Html/CSS JQuery JavaScript

在学习完JavaScript事件之后,我们对事件都有一定的了解了,但是你的编码是否利于维护了呢?这里将讲述编写事件代码的两个规则。

规则1: 将应用逻辑将事件处理程序分离

我们先定义一些对象用于存储跨浏览器的事件处理程序与事件对象方法,这里将不讲解这个代码,详情可参考红宝书。

var EventUtil = {

    // 添加事件处理程序
    addHandler: function(element, type, handler) {

        if (element.addEventListener) {
                        // DOM2级事件处理程序
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
                        // IE事件处理程序
            element.attachEvent("on" + type, handler);
        } else {
                        // DOM0级事件处理程序
            element["on" + type] = handler;
        }
    },

    // 删除事件处理程序
    removeHandler: function(element, type, handler) {
        if(element.removeEventListener) {
            element.removeEventListener(type, handler, false);
        } else if (element.detachEvent) {
            element.detachEvent("on" + type, handler);
        } else {
            element["on" + type] = null;
        }
    },

    // 获取事件对象
    getEvent: function(event) {
        return event ? event : window.event;
    },

    // 获取事件目标
    getTarget: function(event) {
        return event.target || event.srcElement;
    },

    // 阻止默认行为
    preventDefault: function(event) {
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },

    // 取消事件冒泡
    stopPropagation: function(event) {
        if (event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancelBubble = false;
        }
    }
}

或许你现在是这样写代码的

function getClient(event) {
    console.log(event.clientX + event.clientY);
}

// 使用上例代码的对象方法,并且element参数自定义
EventUtil.addHandler(element, "click", getClient);

在上面例子中就没有分离应用逻辑跟事件处理程序。

而应用逻辑与事件处理程序的定义如下:

应用逻辑:应用逻辑是和应用相关的功能性代码,而不是和用户行为相关的。在上例的中getClient函数中的函数体。
事件处理程序:事件处理程序是相应某个事件的函数。

所以我们需要这么做,来分离应用逻辑与事件处理程序。

var myApplication = {
    // 应用逻辑
    getClient: function(event) {
        console.log(event.clientX + event.clientY);
    },

    // 作用只用来调用getClient()函数
    // 此函数也就是事件处理程序
    runGetClient: function(event) {
        this.getClient(event);
    }
}

EventUtil.addHandler(element, "click", function(event) {
    myApplication.runGetClient(event);
}

以为做到上面这样就够了?

现在来说规则2:不要分发事件对象
在上面例子中应用逻辑的功能依赖event对象来完成,但应用逻辑不应该依赖于event对象,相反方法接口对于依赖应该是透明的,并且假如你想测试该方法,可你又得重新创建event对象来测试,如上例

所以使用下面例子来让事件对象不被分发

var myApplication = {
    // 应用逻辑
    getClient: function(x, y) {
        console.log(x + y);
    },

    // 作用只用来调用getClient()函数
    // 此函数也就是事件处理程序
    runGetClient: function(event) {
        this.getClient(event.clientX, event.clientY);
    }
}

EventUtil.addHandler(element, "click", function(event) {
    myApplication.runGetClient(event);
}
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消