JS每日一題: Call,Apply,Bind的使用與區別,如何實現一個bind?

20190115問:

Call,Apply,Bind的使用與區別,如何實現一個bind?前端

相同點:web

  • 都是使用於方法借用及明確this指向場景
  • 第一個參數都是this要指向的對象
  • 均可以利用後續參數傳參

不一樣點:安全

  • 參數傳遞方式不一樣
  • call,apply是當即調用,bind是動態調用

基本使用:bash

Array.prototype.slice.call(obj,0,1,2)
Array.prototype.slice.apply(obj,[0,1,2])
Array.prototype.slice.bind(obj)(0,1,2)
複製代碼

從上面的例子能夠看出來call,apply 使用上幾乎保持一致,而bind其實是返回了一個函數app

簡易bind實現模塊化

Function.prototype.bind = function(context){
    const _this = this
    return function() {
        _this.apply(context, Array.prototype.slice.call(arguments))
    }
}
複製代碼

上面的bind只實現了方法的做用域綁定,參數已經固定,若是想要動態的參數咱們得改寫一下函數

Function.prototype.bind = function(context){
    const _this = this
    const argus = Array.prototype.slice.apply(arguments,[1])
    return function() {
        _this.apply(context, argus.concat(Array.prototype.slice.call(arguments)))
    }
}
複製代碼

往期

JS每日一題: 說說你對前端模塊化的理解
JS每日一題: web安全攻擊手段有哪些?以及如何防範web安全

關於JS每日一題

JS每日一題能夠當作是一個語音答題社區
天天利用碎片時間採用60秒內的語音形式來完成當天的考題
羣主在第二天0點推送當天的參考答案post

  • 注 毫不僅限於完成當天任務,更可能是查漏補缺,學習羣內其它同窗優秀的答題思路

掃描下方二維碼便可加入答題

相關文章
相關標籤/搜索