bind、call、apply区别?如何实现?

news/2024/11/16 14:49:39/文章来源:https://www.cnblogs.com/yangkangkang/p/18549354

一、作用:

  call、apply、bind 作用是改变函数执行的上下文,简而言之就是改变函数运行时的this指向

二、区别

  call: 

    1. 传入的参数不固定

     2.第一个参数是this绑定的对象,后面其余的参数是传入函数执行的参数列表

    3. 第一个参数为null、undefined的时候,默认指向window

    4. 改变this指向后原函数会立即执行,且此方法之时临时改变this一次

  apply:

    1.接收两个参数

     2.第一个参数是this绑定的对象,第二个参数是函数接受的参数,以数组的形式传入

 

              3. 第一个参数为null、undefined的时候,默认指向window

 

     4. 改变this指向后原函数会立即执行,且此方法之时临时改变this一次

 

  bind:

 

             1. 传入的参数不固定

 

     2.第一个参数是this绑定的对象,后面其余的参数是传入函数执行的参数列表(但这个列表可以分多次传入)

    3.第一个参数为null、undefined的时候,默认指向window

    4. 改变this指向后不会立即执行,而是返回一个永久改变this指向的函数

    5. 多个连续bind,最后this指向第一次调用bind方法的参数决定

            function fn (...args){console.log(this,args)}let obj = {name:'张三'}let obj2 = {name:'张三2'}// apply改变this指向,会立即执行fn.apply(obj,[1,2]) // {name:'张三'} [1,2]fn([3,4]) // window// call改变this指向,会立即执行fn.call(obj,5,6)  // {name:'张三'} [5,6]fn()  //window// bind改变this指向,不会立即执行,需要手动调用,参数可分多次传入,多次bind,this指向第一个对象const fn1 = fn.bind(obj,5,6).bind(obj2,7,8)fn1() //  {name:'张三'}  [5,6,7,8]fn1(9,0) // {name:'张三'} [5,6,7,8,9,0]  

 

三、手写实现call、bind、apply 函数

  手写call、bind、apply 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834621.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# 20222403 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 本实践目标是掌握metasploit的用法。 指导书参考Rapid7官网的指导教程。 https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,search一…

_app搭建笔记

逍遥模拟器端口号:21503 (3)adb install +包名的绝对路径 安装apk包 案例:adb install E:\dcs\two\app\mojibase.apk E:\dcs\two\app\baiduyuedu_5520.apk (4)活动路径名: aapt d badging D:\app\baiduyuedu_3760.apk(5)adb uninstall 包名:卸载 com.baidu.yued…

20222323 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 掌握metasploit的用法。 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,search一下就可以use) ②端口扫描:可以直接用nmap,也可以用Aux中的portscan/tcp等。 ③选做:也可以扫系统版本、漏洞等。 (2)Vsft…

InDesign 2025 for Mac(Id2025)最新激活版20.0.0

InDesign 2025具备强大的功能和灵活的扩展性,支持插件扩展,用户可以根据自身需求自定义工具和工作流程。在处理复杂排版和多页面设计时,InDesign 2025注重用户界面的友好性与功能的直观性,即使是新手用户也能快速上手。 InDesign 2025增强了多模态图文编辑能力,使得图像与…

【跟着阿舜学音乐-笔记】1.12和弦功能与进行原理

七和弦 七和弦是三和弦的基础上叠加三音构成的和弦(四个音的和弦)。其中小大七和弦(CmM7)很少运用,因为调内没有小大七和弦,同时听感上也不是很好。 注:有另一种和弦命名方式,即三和弦与根音呈大小七度的音组成和弦的命名法,该命名法对比上述命名法有个特例——增大七…

看过这个,你可能更了解指针一点(2)

先来看下图你认为以下的打印的结果是什么? 接下来,我们先来分析 ****在1中arr单独放在sizeof内表示整个数组, 因此计算的为整个数组大小。即6乘1得到6 1的答案为6 ****在2中arr没有被单独放在sizeof中, arr此时表示数组首元素的地址,+0则表示计算的是第一个元素地址的大小,…

stoi函数介绍

stoi 是 C++ 标准库中的一个函数,定义在头文件 <string> 中,它用于将字符串转换为整数类型。 函数原型 int stoi(const std::string& str, size_t* idx = 0, int base = 10);str(必选):要转换的字符串,必须以数字开头(可以包含正负号)。 插一句题外话 如果不…

数据采集与融合技术-第四次实践作业

gitee链接:作业4 作业①: 要求: 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:http://quote.eastmoney.co…

团队作业4——项目冲刺-第六篇

团队作业4——项目冲刺-第六篇这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <作业要求>这个作业的目标 修改完善需求规格说明书、系统设计、Alpha任务分配计划、测试计划GitHub 链接 https://github.com/tangliweiwww/ChatGpt🍟一、团队 1.团队名称:…

20222306 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线工…

playwright ubuntu 出现 playwright._impl._errors.TimeoutError: Locator.click: Timeout 30000ms exceeded

win系统上正常, ubuntu报错 如下报错:解决Linux环境是英文browser.new_context(locale="zh-CN")本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18549315

【ARM CoreLink 系列 1 -- SoC 架构 总线 互联(interconnect) 介绍】

概述 在 摩尔定律 的推动下,集成电路工艺取得了高速发展,单位面积上的晶体管数量不断增加。片上系统(System-on-Chip,SoC)具有集成度高、功耗低、成本低等优势,已经成为大规模集成电路系统设计的主流方向,解决了通信、图像、计算、消费电子等领域的众多挑战性的难题。随…