javaScript之 bind

  1. 需求:最近面試,面試官問(wèn)能不能現(xiàn)場(chǎng)比劃一個(gè)bind函數(shù)。
    • 小哥哥有一個(gè)很好的習(xí)慣就是從來(lái)不著急寫代碼,既然有了需求那咱就來(lái)分析分析它 !
  2. 我們先要想一下Function.prototype.bind 函數(shù)可以實(shí)現(xiàn)那些功能 。
    • 改變this指向
    • 這個(gè) bind 還可以傳參,fn.bind(obj,...arg)
    • 返回了一個(gè)函數(shù) ,并且不立即執(zhí)行,這就是bind,和call,apply的區(qū)別吧?
      注意:前方高能,小生不才,哪里寫的不到位希望各位看官指正。
  3. 廢話不說(shuō),有了需求,我們也分析了需求,擼唄。
       
       //有逼格一點(diǎn),咱也來(lái)個(gè)原型鏈編程
        Function.prototype.myBind = function (target) {
            var target = target || window
            //返回函數(shù)需要用到的參數(shù)
            var outArgs = [].slice.call(arguments, 1)
            //返回的那個(gè)函數(shù)
            var fn = () => {
                //返回的這個(gè)函數(shù)在執(zhí)行的時(shí)候,還有可能在傳參,我們把它拿出來(lái)
                var innArgs = [].slice.call(arguments, 0)
                //最后執(zhí)行這個(gè)函數(shù)唄
                return this.apply(target, outArgs.concat(innArgs))
            }
            return fn
        }
        var name = "我真的很帥"
        var obj = {
            name: "我很帥"
        }
        function testBind() {
            console.log(this.name)
        }
        var test = testBind.myBind(obj)
        console.log(test())  //我很帥,哇塞,this指向改變了,也返回了一個(gè)函數(shù),功能實(shí)現(xiàn)
    
    
    1. 第一次寫文章,有啥不對(duì)的地方希望大家指正,以后我會(huì)每天寫一點(diǎn)小東西,把自己掌握的東西分享出來(lái)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容