专栏首页杰的记事本Js中的call vs apply vs bind及记忆方式

Js中的call vs apply vs bind及记忆方式

前言

js中的call(), apply()和bind()是Function.prototype下的方法,都是用于改变函数运行时上下文,最终的返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。

apply()

使用 apply, 你可以继承其他对象的方法:

注意这里apply()的第一个参数是null,在非严格模式下,第一个参数为null或者undefined时会自动替换为指向全局对象,apply()的第二个参数为数组或类数组。

call()

call()是apply()的一颗语法糖,作用和apply()一样,同样可实现继承,唯一的区别就在于call()接收的是参数列表,而apply()则接收参数数组。

bind()

bind()的作用与call()和apply()一样,都是可以改变函数运行时上下文,区别是call()和apply()在调用函数之后会立即执行,而bind()方法调用并改变函数运行时上下文后,返回一个新的函数,供我们需要时再调用。

用apply()模拟实现bind():

在返回的新函数内部,self.apply(context, arguments)才是执行原来的getName函数,相当于执行getName.apply(person);

如何选用

如果不需要关心具体有多少参数被传入函数,选用apply();如果确定函数可接收多少个参数,并且想一目了然表达形参和实参的对应关系,用call();如果我们想要将来再调用方法,不需立即得到函数返回结果,则使用bind();

总结

call()、apply()和bind()都是用来改变函数执行时的上下文,可借助它们实现继承;call()和apply()唯一区别是参数不一样,call()是apply()的语法糖;bind()是返回一个新函数,供以后调用,而apply()和call()是立即调用。

我是怎么记的

apply是a开头跟array的a开头一致,所以apply的参数是数组的,其余两个call 和 bind的参数就不需要记忆了,都是多参数类型。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • clearfix为什么用display:table,而不用display:block

    但是为嘛用 display:table哪? 我用display:block好像也是显示很正常,也能清除浮动。

    javascript.shop
  • HTML5 video视频倍速播放playbackRate

    javascript.shop
  • Nodejs写的爬虫及模拟提交知识分享

    这篇文章 主要学习这两个模块的使用:request-promise-native : https://github.com/request/request-pr...

    javascript.shop
  • JavaScript中apply、call、bind的区别与用法

    apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。 语法: func.apply(thisArg,...

    前端达人
  • js原生函数之call和apply,bind

    call 和 apply 和 bind 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。

    用户1394570
  • 这块板子里,塞下了两万个传感器

    大数据文摘
  • 学界 | Hinton提出的经典防过拟合方法Dropout,只是SDR的特例

    作者:Noah Frazier-Logue、Stephen José Hanson

    机器之心
  • 学界 | Hinton提出的经典防过拟合方法Dropout,只是SDR的特例

    作者:Noah Frazier-Logue、Stephen José Hanson

    zenRRan
  • 论文拾萃 | 紧致化智能机器人存取系统的运行策略研究

    近年来,紧致化智能机器人存取系统(Robotic compact storage and retrieval systems)得到了广泛应用。该类系统将货物存储...

    用户1621951
  • NLP 迎来了黄金时代

    那一年,我以机器翻译方向的博士毕业,到几家单位应聘。当年,毕业的博士还很少。因此,应聘单位对我似乎还是网开一面,这导致我经历的应聘过程都十分轻松短暂。几个单位基...

    二月春风似剪刀

扫码关注云+社区

领取腾讯云代金券