博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS每日一题: Call,Apply,Bind的使用与区别,如何实现一个bind?
阅读量:7048 次
发布时间:2019-06-28

本文共 905 字,大约阅读时间需要 3 分钟。

20190115问:

Call,Apply,Bind的使用与区别,如何实现一个bind?

相同点:

  • 都是使用于方法借用及明确this指向场景
  • 第一个参数都是this要指向的对象
  • 都可以利用后续参数传参

不同点:

  • 参数传递方式不同
  • call,apply是立即调用,bind是动态调用

基本使用:

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实际上是返回了一个函数

简易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每日一题可以看成是一个语音答题社区

每天利用碎片时间采用60秒内的语音形式来完成当天的考题
群主在次日0点推送当天的参考答案

  • 注 绝不仅限于完成当天任务,更多是查漏补缺,学习群内其它同学优秀的答题思路

扫描下方二维码即可加入答题

转载地址:http://hfkol.baihongyu.com/

你可能感兴趣的文章
AE intersect、clip的实现
查看>>
图解使用Win8Api进行Metro风格的程序开发一----建立我们的导航架构
查看>>
iOS开发过程中使用Core Data应避免的十个错误
查看>>
I.MX6 wpa_cli 使用
查看>>
windows使用nginx实现网站负载均衡测试实例
查看>>
DotLiquid模板引擎简介
查看>>
5.Flask-Migrate
查看>>
c# 正则表代式的分组和批评模式 .
查看>>
编程之美-3.1-字符串移位包含的问题
查看>>
EPC是什么
查看>>
T-SQL查询进阶--数据集之间的运算
查看>>
【Vegas原创】Linux下unrar安装与配置
查看>>
HDOJ 2095(找出唯一的出现一次的数)
查看>>
java面试32问
查看>>
钟翔平:坚持走手机浏览器架构创新之路
查看>>
图片处理--浮雕特效
查看>>
chr() ord() 的用法
查看>>
C++对象模型简介(二)——深入底层,探索本质
查看>>
Nginx模块之————RTMP模块的FFmpeg的配置问题是FFmpeg的连续退出
查看>>
基本的RAID介绍
查看>>