手写call、apply和bind
00 分钟
2023-10-7
2024-5-17
type
status
date
slug
summary
category
password
tags
icon
 
 
😀
在 JavaScript 中,函数是“一等公民”,这意味着函数可以像其他变量一样被赋值、传递和操作。函数对象拥有一些强大的方法,其中包括 callapplybind。本文展示如何手写它们的自定义实现。
 

call

call 方法用于调用一个函数,并显式地指定 this 的值以及参数。
特殊的地方在于:
  • 如果传入的ctx(this)是null或者undefined,this就会变成全局this,node环境和浏览器环境的this是不一样的,但是都有一个globalThis在不同的环境生效。
  • 如果传入的ctx不是null或者undefined:
    • 如果ctx是原视类型,会转为Object包装对象。
    • 如果不是原始类型,则就是它自身。

apply

apply和call的区别就是传入的非this参数变成数组形式,其他没有任何区别。
也可以基于call:

bind

bind 方法创建一个新的函数,在调用时,该函数的 this 值会被设置为 bind 的第一个参数,其余参数将作为新函数的预置参数。
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~