成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

201908-前端筆記-手動實現(xiàn)apply和call、bind

Betta / 2923人閱讀

摘要:刪除方法,返回。處理參數(shù),返回一個閉包判斷是否為構造函數(shù)調(diào)用,如果是則調(diào)用調(diào)用當前函數(shù)如果不是,則用,將和參數(shù)傳入?yún)⒖?/p>

apply
Function.prototype.myApply = function(context,args){
    // 如果是調(diào)用自己,則返回undefined
    if(this===Function.prototype) return false;
    
    context=context || window;

    var fn = Symbol(),
    result;
    
    context[fn]=this;
    
    if(Array.isarray(args)){
        result = context[fn](...args);
    }else{
        result = context[fn]();
    }
    
    delete context[fn];
    return result;
}

1.如果是調(diào)用自己,則返回undefined
2.判斷context是否存在,不存在則調(diào)用window
3.新增一個Symbol屬性,賦值給context
4.將當前函數(shù)賦值給這個屬性
5.判斷傳參是否數(shù)組
6.如果是,則將其余的參數(shù)傳入執(zhí)行方法。如果否,則直接調(diào)用方法。
7.刪除方法,返回。

call
Function.prototype.myCall= function(context=window,...args){
    if(this === Function.prototype) return undefined;
    
    context= context || window
    
    var fn = Symbol(),
    result;
    
    context[fn] = this;
    
    result = context[fn](...args)
    delete context[fn]
    return result;
}

1.如果是調(diào)用自己,則返回undefined
2.判斷context是否存在,不存在則調(diào)用window
3.新增一個Symbol屬性,賦值給context
4.將當前函數(shù)賦值給這個屬性
5.將其余的參數(shù)傳入執(zhí)行方法
6.刪除方法,返回。

bind
Function.prototype.myBind = function(context=window,...args){
    if(this === Function.prototype) return undefined;
    
    const _this = this ;
    
    return function F(...args2){
        if(this instanceof F){
            return new _this(...args,...args2)
        }
        _this.apply(context,args.concat(...args2))
    }
}

1.處理參數(shù),返回一個閉包
2.判斷是否為構造函數(shù)調(diào)用,如果是則調(diào)用new調(diào)用當前函數(shù)
3.如果不是,則用apply,將contextargs參數(shù)傳入

參考

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/110017.html

相關文章

  • Javascript中this與閉包學習筆記

    摘要:但是在調(diào)用函數(shù)值執(zhí)行之后并沒有達到我們想要的效果。解析在這里我們?yōu)槊恳粋€的事件綁定了一個匿名函數(shù),這個匿名函數(shù)就形成了一個閉包。這樣我們就為每個的事件的匿名函數(shù),都保存下了自己閉包變量。 博客原址 理解 Javascript中的this 基于不同的調(diào)用方式this的指向也會有所不同,調(diào)用方式大致有如下幾種: 調(diào)用方式 表達式 構造函數(shù)調(diào)用 new Foo(); 對象方法...

    pinecone 評論0 收藏0
  • 【進階3-1期】JavaScript深入之史上最全--5種this綁定全面解析

    摘要:在嚴格模式下調(diào)用函數(shù)則不影響默認綁定?;卣{(diào)函數(shù)丟失綁定是非常常見的。因為直接指定的綁定對象,稱之為顯示綁定。調(diào)用時強制把的綁定到上顯示綁定無法解決丟失綁定問題。 (關注福利,關注本公眾號回復[資料]領取優(yōu)質前端視頻,包括Vue、React、Node源碼和實戰(zhàn)、面試指導) 本周正式開始前端進階的第三期,本周的主題是this全面解析,今天是第9天。 本計劃一共28期,每期重點攻克一個面試重...

    xavier 評論0 收藏0
  • JavaScript MVC 學習筆記(四)類的使用(下)

    摘要:基于函數(shù)進行調(diào)用的,用來確保函數(shù)是在指定的值所在的上下文中調(diào)用的。添加私有函數(shù)目前上面為類庫添加的屬性都是公開的,可以被隨時修改。以基于的富應用開發(fā)為主要學習資料。 控制類庫的作用域 在類和實例中都添加proxy函數(shù),可以在事件處理程序之外處理函數(shù)的時候保持類的作用域。下面是不用proxy的辦法: var Class = function(parent){ var klas...

    Rango 評論0 收藏0
  • 前端工程師手冊】JavaScript之this的筆記

    摘要:函數(shù)別名是全局對象的屬性顯式綁定一個小栗子和第一個參數(shù)是一個對象,它們會把這個對象綁定到,接著在調(diào)用函數(shù)時指定這個。 今天總結一下this。 誤解 熟悉Java或者其他語言的同學看到this會想當然的認為this指向函數(shù)本身,然而在JavaScript中并不是這樣子。 function func(){ console.log(this.index) } func.index ...

    roland_reed 評論0 收藏0
  • JS學習筆記 - 代碼復用

    摘要:本文章記錄本人在學習中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復習。但是在開發(fā)的過程中,并不是所有的代碼復用都會使用到繼承。而且整個代碼都無法按照預期來運行。為了修復綁定對象與方法之間的關系。 本文章記錄本人在學習 JavaScript 中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復習。 js 中復用代碼 說道代碼復用,一般都會涉及到對...

    cheng10 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<