js事件底層原理探究


    

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <button>事件監聽原理探究</button>


<script>

    var btn = document.getElementsByTagName("button")[0];

//    btn.addEventListener("click",fn1);
//    btn.addEventListener("click",fn2);

 
        var i=0;
    fn("click",fn1,btn);
    fn("click",fn2,btn);
    fn("click",fn3,btn);



        

    function fn1(){
        i++;
        console.log("我是第一個監聽"+i);
    }
    function fn2(){
        i++;
        console.log("我是第二個監聽"+i);
    }
    function fn3(){
        i++;
        console.log("我是第三個監聽"+i);
    }

  
    function fn(str,fn,ele){

        //判斷位置要注意:如果進入綁定事件本身,那么該事件已經本綁定了
        //所以獲取舊的事件必須在新的事件綁定之前
        var oldEvent = ele["on"+str];
        ele["on"+str] = function () {
            //不能直接執行函數,因為我們還不知道以前有沒有綁定我同樣的事件
            //進行判斷,如果以前有過綁定事件,那么把以前的執行完畢在執行現在的事件,如果沒有就直接執行
            //如果沒有被定義過事件該事件源的該事件屬性應該是null對應的boolean值是false
            //如果已經定義過事件該事件源的該事件屬性應該是function本身對應的boolean值是true
            if(oldEvent){
                //因為oldEvent本身他就是函數本身,那么后面加一個();就是執行函數
                // console.log(oldEvent()+"oldEvent"+i);
                oldEvent();

                fn();
            }else{
                //沒有綁定過事件
                fn();
                console.log("沒有綁定事件");
            }
        }
    }

</script>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM