JavaScript中的call和apply到底是用来干什么大物,总是对他俩的用法特别迷
JavaScript中的call和apply如何使用,这两个函数存在的目的是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
JavaScript中的call和apply如何使用,这两个函数存在的目的是什么?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
这俩函数有啥用、咋用,看 MDN 就行了。
我主要是来吐槽的。
写前端的直接承认就行了,JavaScript 这门语言被 Brendan Eich 搞的就是屎!一!样!的!设!计!
Wiki 上原文:
大意就是 JavaScript 根本就是 Bredan Eich 这一个实习生在短时间内赶工出来的一个目标轻量级的解释形语言。
Bredan Eich 本来是个写 Lisp 的,压根就没搞过 OOP,但是当时网景想借 Java 的“东风”,结果他“苦熬”十天憋出来这么个玩意儿。你能在 JavaScript 里看到很多 Lisp 的影子,感觉它好像是个函数式的。函数式里函数是第一等公民(即所谓的 First-Class Function),函数可以被当作参数传递给另一个函数,这里就涉及到作用域的问题。可是又特么有个不伦不类的
prototype
和this
,又有点儿像 OOP。call
和apply
就是这种情况下的产物,又像函数式又像 OOP。补充:
呵呵好几个踩我的,都是前端没跑了。
我自己也写前端,写这么多年了谁骂 JS 我给谁点赞。
JS 是屎、可不代表用屎写不出来牛哔的作品来。这都拎不清的我劝你趁早转行。
估计水平不咋地的人看到自己唯一会的一门语言被骂,只会急得跳脚,暗搓搓地点个踩心里再喷两句,也不想想自己写的代码是不是屎上加屎。
绑定this 借用别的原型链的方法
Array.prototype.map 也可以用 for 循环实现,存在的目的又是什么呢?
关于用法,参见 MDN文档:Function.prototype.call()。
至于ES标准提供这两个方法的目的,那肯定是让大家ES用得更称手一些,官方已经给出了很好的例子,不信你撇开 apply 自己写一个求任意长度数值数组最大值的方法,代码量和官方示例一比就能看出来了。