国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端面試題-js-new關鍵字-this指向-js事件流-防抖節(jié)流

這篇具有很好參考價值的文章主要介紹了前端面試題-js-new關鍵字-this指向-js事件流-防抖節(jié)流。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

new 關鍵字都做了什么 this指向問題

1.創(chuàng)建一個簡單的空對象
2.原型的綁定,確定對象O的原型鏈
3.綁定this對象為O,傳入?yún)?shù);執(zhí)行Person構(gòu)造函數(shù),進行屬性和方法的賦值操作
4.返回結(jié)果
普通函數(shù)的this指向
函數(shù)的this指向有一個基本的原則,誰調(diào)用的函數(shù),函數(shù)的this就指向誰,否則指向全局
箭頭函數(shù)的this指向
箭頭函數(shù)本身沒有this,箭頭函數(shù)的this是定義箭頭函數(shù)時父級作用域的this,也就是說使用箭頭函數(shù)的時候,箭頭函數(shù)內(nèi)部的this,我們只需要看檔箭頭函數(shù)定義時,該箭頭函數(shù)的父級的this即可
構(gòu)造函數(shù)指向new出來的新對象

JS事件流

DOM事件流是有兩種的,一種是捕獲事件一種是冒泡事件
事件捕獲(event capturing):由微軟公司提出,事件從文檔根節(jié)點(Document對象)流向目標節(jié)點,途中會經(jīng)過目標節(jié)點的各個父級節(jié)點,并在這些節(jié)點上觸發(fā)捕獲事件,直至到達文檔根節(jié)點。(下圖點擊的粉色方塊)
前端面試題-js-new關鍵字-this指向-js事件流-防抖節(jié)流,前端面試題,前端,javascript,開發(fā)語言

事件冒泡(event bubbling):由網(wǎng)景公司提出,與捕獲時間相反,世界會從目標節(jié)點流向文檔的根元素節(jié)點,途中會經(jīng)過目標節(jié)點的各個父級節(jié)點,并在這些節(jié)點上觸發(fā)捕獲事件,直至到達文檔的根節(jié)點。整個過程就像水中的奇葩一樣,從水底向上運動。(下圖點擊的淺粉色方塊)
前端面試題-js-new關鍵字-this指向-js事件流-防抖節(jié)流,前端面試題,前端,javascript,開發(fā)語言
W3C為了統(tǒng)一標準,采用了折中的方式,即將事件捕獲與事件冒泡合并,也就是現(xiàn)在的先捕獲后冒泡。

怎么阻止事件冒泡
1.w3c: event.stopPropagation()
2.IE: window.event.cancelBubble = true
3.vue (擴展)事件修飾符stop

** 怎么阻止默認事件**
event.preventDefault()

什么是事件委托
使用事件冒泡原理,自己所觸發(fā)的事件,讓其父元素代為執(zhí)行
例如:富文本解析在不改變富文本內(nèi)容的情況下給圖片實現(xiàn)點擊放大預覽效果 可以把事件給到解析富文本的那個盒子 然后通過event 去判斷點擊是不是圖片 再進行下面的事件處理

防抖節(jié)流函數(shù)

函數(shù)防抖:規(guī)定渙散至少間隔多久執(zhí)行(窗口大小的變化,模糊查詢)
函數(shù)節(jié)流 :規(guī)定函數(shù)在某時間段內(nèi)最多執(zhí)行一次(典型案例就是鼠標不斷點擊觸發(fā),規(guī)定在n秒內(nèi)多次點擊只有一次生效,用戶登錄等場景)

函數(shù)防抖和函數(shù)節(jié)流的對比:
不管是函數(shù)節(jié)流還是函數(shù)防抖,減少都是事件處理程序的調(diào)用頻率,而不是時間的調(diào)用頻率。

何時使用函數(shù)防抖,何時使用函數(shù)節(jié)流
當我們只需要處理最后一次觸發(fā)的事件時,用函數(shù)防抖。
當事件觸發(fā)過于頻繁,我們需要限制事件處理程序的調(diào)用頻率,用函數(shù)節(jié)流

用vue寫函數(shù)防抖節(jié)流指令文章來源地址http://www.zghlxwxcb.cn/news/detail-824522.html


export default {
    install(Vue, Options) {
        /*
         *  防抖,規(guī)定時間內(nèi)(默認300毫秒)最后一次點擊有效。
         *  @param {?Number|300} time - 間隔時間,毫秒
         *  @param {Function} fn - 執(zhí)行函數(shù)
         *  @param {?String|"click"} event - 事件類型 例:"click"
         *  @param {Array} binding.value - [fn,event,time]
         *  例:<el-button v-debounce="[resetData,`click`,300]">刷新</el-button>
         *  也可簡寫成:<el-button v-debounce="[resetData]">刷新</el-button>
         */
        // 注冊一個全局自定義指令 `v-debounce`
        Vue.directive('debounce', {
            // 當被綁定的元素插入到 DOM 中時……
            inserted: function (el, binding) {
                //binding.value,使用自定義指令v-debounce時填寫的參數(shù)
                //解構(gòu)賦值,定義了3個變量,將參數(shù)(數(shù)組)按順序進行賦值
                let [fn, event = "click", time = 300] = binding.value
                let timer
                el.addEventListener(event, () => {
                    //默認監(jiān)聽的事件為click
                    //判斷計時器是否存在,存在則清除計時器。重新創(chuàng)建計時器,到時間后執(zhí)行函數(shù)fn
                    if (timer) {
                        clearTimeout(timer)
                    }
                    timer = setTimeout(() => fn(), time)
                })
            }
        })

        /*
         *  節(jié)流,規(guī)定時間內(nèi)可點擊一次(第一次點擊有效)。
         *  @param {?Number|300} time - 間隔時間,毫秒
         *  @param {Function} fn - 執(zhí)行函數(shù)
         *  @param {?String|"click"} event - 事件類型 例:"click"
         *  @param {Array} binding.value - [fn,event,time]
         *  例:<el-button v-throttle="[resetData,`click`,300]">刷新</el-button>
         *  傳遞參數(shù)則:<el-button v-throttle="[()=>resetData(param),`click`,300]">刷新</el-button>
         */
        // 注冊一個全局自定義指令 `v-throttle`
        Vue.directive('throttle', {
            // 當被綁定的元素插入到 DOM 中時……
            inserted: function (el, binding) {
                //binding.value,使用自定義指令v-throttle時填寫的參數(shù)
                //解構(gòu)賦值,定義了3個變量,將參數(shù)(數(shù)組)按順序進行賦值
                let [fn, event = "click", time = 300] = binding.value
                let timer = null;
                el.addEventListener(event, () => {
                    //默認監(jiān)聽的事件為click
                    //判斷計時器是否存在,不存在則執(zhí)行函數(shù)fn,創(chuàng)建計時器
                    if (timer == null) {
                        fn();
                        timer = setTimeout(() => timer = null, time)
                    }
                })
            }
        })

        /*
         *  節(jié)流方案二,通過禁用html標簽,規(guī)定時間內(nèi)可點擊一次(第一次點擊有效)。
         *  應用在封裝的組件中可能無效。
         *  @param {?String|"click"} event - 事件類型 例:"click"
         *  @param {?Number|2000} time - 間隔時間,毫秒
         *  @param {Array} binding.value - [event,time]
         *  例:<button v-throttle-disabled="[]">測試按鈕</button>
         */
        //注冊一個全局自定義指令 `v-throttle-disabled`
        Vue.directive('throttle-disabled', {
            // 當被綁定的元素插入到 DOM 中時……
            inserted(el, binding) {
                let [event = "click", time = 2 * 1000] = binding.value
                el.addEventListener(event, () => {
                    //默認監(jiān)聽click事件
                    //當 dom元素el 非禁用狀態(tài)時 將其設置為禁用狀態(tài),同時設置計時器,規(guī)定時間后(默認2秒)啟用。
                    if (!el.disabled) {
                        el.disabled = true
                        setTimeout(() => {
                            el.disabled = false
                        }, time)
                    }
                })
            }
        })
    }
}

到了這里,關于前端面試題-js-new關鍵字-this指向-js事件流-防抖節(jié)流的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • class_10:this關鍵字

    class_10:this關鍵字

    this是指向調(diào)用對象的指針? ? 鏈式調(diào)用 ? 在這個例子中,Car類的構(gòu)造函數(shù)使用this指針來區(qū)分成員變量好人構(gòu)造函數(shù)參數(shù)。同意,setYear成員函數(shù)使用this指針來返回該函數(shù)的對象的引用,這允許鏈式調(diào)用,如

    2024年01月20日
    瀏覽(25)
  • this關鍵字的四種用法

    表示對象自己的屬性使用this調(diào)用成員變量,解決變量與局部變量之間的沖突問題 代碼如下(示例): 代碼如下(示例): 控制臺運行結(jié)果: 分析:為什么會出現(xiàn)這種情況呢?當我們調(diào)用構(gòu)造方法所傳遞的三個參數(shù)值“張三”、20和178.5最終并沒有賦值到對象的三個屬性中。

    2023年04月22日
    瀏覽(25)
  • Java編程練習之this關鍵字

    Java編程練習之this關鍵字

    當類中的成員變量與成員方法中的參數(shù)重名時,會導致方法無法直接使用成員變量。 示例:創(chuàng)建demo類,定義一個成員變量name并賦初值,再定義一個成員方法showName(String name),輸出方法中name的值。代碼如下: package zhtestdemo; public class demo { ?//創(chuàng)建類,類名叫demo /**/ ?? ?Str

    2024年01月22日
    瀏覽(24)
  • 面向?qū)ο缶幊蹋ㄟM階)1:關鍵字:this

    面向?qū)ο缶幊蹋ㄟM階)1:關鍵字:this

    目錄 1.1 this是什么? 1.2 什么時候使用this 1.2.1 實例方法或構(gòu)造器中使用當前對象的成員 舉例1: 舉例2: 測試類: 1.2.2 同一個類中構(gòu)造器互相調(diào)用 注意: 1.3 練習 **練習1:** 練習2: 在Java中,this不算難理解,它的作用和其詞義很接近。 它在方法(準確的說是實例方法

    2023年04月13日
    瀏覽(28)
  • 深入理解C#泛型:new與where關鍵字全解析

    C#泛型中new和where是重要的,它們都可以用于約束泛型類型參數(shù)的限制;它們都用于提高代碼的安全性和可用性,它們的作用在很大程度上提高了代碼的可讀性和可維護性。在這篇文章中,我們將一起了解泛型中的new和where,以及它們之間的區(qū)別。 1. new 在C#泛型中

    2023年04月25日
    瀏覽(19)
  • JavaSE基礎(19) super,this 關鍵字

    子類對象的創(chuàng)建過程: 子類的構(gòu)造方法中,默認先調(diào)用父類的無參構(gòu)造方法。如果沒有顯示的調(diào)用,那么隱含著super()。 ????????可以訪問父類的屬性 ????????可以訪問父類的方法 ????????指代父類的構(gòu)造方法, 如果有多個,靠參數(shù)來區(qū)分。要在第一行。 ?????

    2023年04月10日
    瀏覽(23)
  • 安全初級—正則表達式、This關鍵字、閉包

    字面量字符 某個字符只表示它字面的含義,例如 /a/ 匹配 a , /b/ 匹配 b 。 元字符 (1)點字符(.) 點字符可以匹配除回車( r )、換行( n )、行分隔符( u2028 )和段分隔符( u2029 )以外的所有字符。 同時,點字符對于碼點大于 0xFFFF 字符也不能正確的匹配,會認為這是兩個字符

    2024年02月15日
    瀏覽(23)
  • 【Java 基礎】構(gòu)造方法和 this 關鍵字詳解

    【Java 基礎】構(gòu)造方法和 this 關鍵字詳解

    《 Java 零基礎入門到精通 》 專欄持續(xù)更新中。通過本專欄你將學習到 Java 從 入門 到 進階 再到 實戰(zhàn) 的全套完整內(nèi)容,所有內(nèi)容均將集中于此專欄。無論是初學者還是有經(jīng)驗的開發(fā)人員,都可從本專欄獲益。 訂閱專欄后添加我微信或者進交流群,進群可找我領取 前端/Java

    2023年04月14日
    瀏覽(22)
  • this關鍵字和同步異步宏認為微任務理解

    this關鍵字和同步異步宏認為微任務理解

    目錄 js面試常見問題:1.this指向? 2.閉包定義和作用 3.原型鏈 4.異步協(xié)程 this this主要有以下幾個使用場合。 1)全局環(huán)境 (2)構(gòu)造函數(shù) (3)對象的方法 避免多層this 避免數(shù)組處理方法中的 this 避免回調(diào)函數(shù)中的 this 綁定 this 的方法 Function.prototype.call() Function.prototype

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包