最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JavaScript函數(shù)綁定

 更新時間:2013年08月18日 17:47:10   作者:  
在JavaScript與DOM交互中經(jīng)常需要使用函數(shù)綁定,定義一個函數(shù)然后將其綁定到特定DOM元素或集合的某個事件觸發(fā)程序上,綁定函數(shù)經(jīng)常和回調(diào)函數(shù)及事件處理程序一起使用,以便把函數(shù)作為變量傳遞的同時保留代碼執(zhí)行環(huán)境

復(fù)制代碼 代碼如下:

<body>

    <input id="btnTest" type="button" value="Button"/>
        <script type="text/javascript">           
            var handler={
                message:"Event handled.",
                handlerFun:function(){
                    alert(this.message);
                }
            };

            document.getElementById('btnTest').onclick=handler.handlerFun;
        </script>
    </body>

上面的例子創(chuàng)建了一個handler對象,handler.handlerFun()方法被分配為DOM按鈕的click事件處理程序。設(shè)計意圖是這樣的:當(dāng)點擊按鈕的時候觸發(fā)該方法,彈出對話框顯示handler定義的message,然而點擊后對話框內(nèi)容卻是undefined。熟悉閉包的同學(xué)可以輕松看出來這個問題在于沒有保存handler.handlerFun()方法的執(zhí)行環(huán)境,this對象最后指向了DOM按鈕而非handler??梢允褂瞄]包解決此問題,修改函數(shù)綁定語句
復(fù)制代碼 代碼如下:

document.getElementById('btnTest').onclick=function(){
                handler.handlerFun();
            }

這樣就可以得到預(yù)期的結(jié)果,這個解決方案在onclick程序內(nèi)部使用一個閉包直接調(diào)用handler.handlerFun()方法,當(dāng)然這是特定于此場景的解決方案,創(chuàng)建多個閉包可能會令代碼難以理解和調(diào)試。


自定義bind函數(shù)

復(fù)制代碼 代碼如下:

function bind(fn,context){
                return function(){
                    return fn.apply(context,arguments);
                };
            }

            document.getElementById('btnTest').onclick=bind(handler.handlerFun,handler);

通過自定義的bind函數(shù)可以將函數(shù)綁定到指定環(huán)境,bind()函數(shù)接收兩個參數(shù):一個綁定函數(shù),一個執(zhí)行環(huán)境,并返回一個在執(zhí)行環(huán)境中調(diào)用綁定函數(shù)的函數(shù)??雌饋砗芎唵危瞧涔δ芎軓?qiáng)大,在bing()中創(chuàng)建了一個閉包,閉包使用apply()調(diào)用傳入的函數(shù),并給apply()傳入執(zhí)行環(huán)境和參數(shù),這里的arguments是內(nèi)部匿名函數(shù)的,而非bind()的。當(dāng)調(diào)用返回的函數(shù)時,它會在給定的函數(shù)中執(zhí)行被傳入的函數(shù),并給出所有參數(shù)。上面例子的調(diào)用handler.handlerFun依舊可以得到參數(shù)event,因為所有參數(shù)在都通過綁定的函數(shù)傳遞給它了。

小結(jié)

一旦要將某個函數(shù)以函數(shù)指針的形式傳遞,同時該函數(shù)必須在特定的環(huán)境中執(zhí)行,自定義的bind()函數(shù)就可以使用,他們主要用于事件處理程序及setTimeout和setInterval,然而這種綁定方式和普通函數(shù)相比需要更多的內(nèi)存開銷,所以盡量只在必要的時候使用。

相關(guān)文章

  • JavaScript的字符串方法匯總

    JavaScript的字符串方法匯總

    字符串的操作在js中非常頻繁,也非常重要。以往看完書之后都能記得非常清楚,但稍微隔一段時間不用,便會忘得差不多,記性不好是硬傷啊。。。今天就對字符串的一些常用操作做個整理,一者加深印象,二者方便今后溫習(xí)查閱。
    2016-07-07
  • 推薦10款擴(kuò)展Web表單的JS插件

    推薦10款擴(kuò)展Web表單的JS插件

    本篇文章給大家介紹了10款擴(kuò)展Web表單的javascript的插件,一起跟著小編來學(xué)習(xí)下吧。
    2017-12-12
  • JavaScript DOM進(jìn)階方法

    JavaScript DOM進(jìn)階方法

    這篇文章主要介紹了JavaScript DOM進(jìn)階,需要的朋友可以參考下
    2015-04-04
  • Redis基本知識、安裝、部署、配置筆記

    Redis基本知識、安裝、部署、配置筆記

    這篇文章主要介紹了Redis基本知識、安裝、部署、配置筆記,本文講解了基本知識、安裝Redis、Redis的配置等知識,需要的朋友可以參考下
    2015-03-03
  • JavaScript中splice的使用方法詳解

    JavaScript中splice的使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript中splice的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • input按鈕的事件處理大全

    input按鈕的事件處理大全

    input按鈕的事件處理大全,收集的是網(wǎng)頁中常用的一些事件處理,需要的朋友可以收藏下。
    2010-12-12
  • JavaScript中BOM和DOM詳解

    JavaScript中BOM和DOM詳解

    本文主要講解了JavaScript中BOM和DOM,BOM為瀏覽器對象模型,DOM 為文檔對象模型,兩者之間有很大的區(qū)別,感興趣的小伙伴可以閱讀一下這篇文章,了解相關(guān)內(nèi)容
    2021-08-08
  • JavaScript基礎(chǔ)之Array?forEach使用示例

    JavaScript基礎(chǔ)之Array?forEach使用示例

    這篇文章主要為大家介紹了JavaScript基礎(chǔ)之Array?forEach使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 輕松掌握J(rèn)avaScript中的Math object數(shù)學(xué)對象

    輕松掌握J(rèn)avaScript中的Math object數(shù)學(xué)對象

    Math對象或者說是類型旗下?lián)碛泻芏嗥綍r常用的數(shù)學(xué)函數(shù),雖然并不像Date和String那樣擁有類似于類和方法那樣的使用方式,不過并不妨礙您通過本文來輕松掌握J(rèn)avaScript中的Math object數(shù)學(xué)對象^^
    2016-05-05
  • JavaScript中String.match()方法的使用詳解

    JavaScript中String.match()方法的使用詳解

    這篇文章主要介紹了JavaScript中String.match()方法的使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06

最新評論

神农架林区| 万荣县| 息烽县| 济宁市| 延津县| 北辰区| 锡林郭勒盟| 砚山县| 神木县| 玛曲县| 沅陵县| 西峡县| 巴东县| 黑龙江省| 尉氏县| 阿拉善右旗| 绥滨县| 高阳县| 瓮安县| 东平县| 麻阳| 江安县| 徐州市| 特克斯县| 玉龙| 安庆市| 丹巴县| 尚义县| 洛宁县| 曲靖市| 鸡泽县| 铁力市| 玉环县| 稻城县| 西乡县| 黑河市| 肥东县| 高青县| 色达县| 会理县| 南川市|