23、js - call()apply()bind()

news/2024/10/21 6:19:43/
<body><button>我是按钮</button>
</body></html><script>// call  apply  bind 都可以改变this指向function fn(a, b) {const title = 'ts';console.log(this);console.log(this.title);return a + b;}const obj = {title: 'vite'}// 一、call()// call()的作用:// 1、会直接调用函数fn.call();// 2、会改变this指向// 参数1:this指向// 剩余参数:传给函数的参数const result1 = fn.call(obj, 1, 2);console.log(result1); // 3// call()的应用场景:检测数据类型const arr = [1, 2, 3];const obj1 = { name: 1 };console.log(arr.toString()); // 1,2,3console.log(obj1.toString()); // [object Object]// 使用call()方法改变toString()方法的this指向为arr,得到[object Array]console.log(Object.prototype.toString.call(arr)); // [object Array]// 二、apply()// apply()的作用:// 1、会直接调用函数fn.apply();// 2、会改变this指向// 参数1:this指向// 参数2:传给函数的参数,必须是个数组const result2 = fn.apply(obj, [1, 2]);console.log(result2); // 3// apply()的应用场景:求数组的最大值const arr1 = [1, 2, 3, 4];console.log(Math.max.apply(null, arr1)); // 4// 等价于es6用展开运算符解决console.log(Math.max(...arr1)); // 4// 三、bind()// bind()的作用// 1、不会直接调用函数// 2、会改变this指向// 3、会返回一个新函数,新函数里的this指向参数1// 参数1:this指向// 剩余参数:传给函数的参数const result3 = fn.bind(obj, 3, 4);console.log('result3--->', result3()); // result3---> 7// bind()应用场景:需要改变函数的this指向,又不想调用函数,比如修改延时器的函数的this指向document.querySelector('button').addEventListener('click', function () {setTimeout(function () {console.log(this); // <button>我是按钮</button>this.style.color = "red";}.bind(this), 3000);// 等价于es6用箭头函数解决setTimeout(() => {this.style.color = "red";}, 3000);})</script>

http://www.ppmy.cn/news/241346.html

相关文章

X11 转发

文章目录 参考参与者与凭据情景1 &#xff1a; 桌面终端下打开firefox情景2 &#xff1a; ssh 终端下打开firefox 情景1桌面终端下的 案例与DISPLAY 情景2基于X11转发的ssh案例ssh 终端下的 DISPLAY 情景2 下 vim 慢的问题 参考 什么是X11-forwarding&#xff1f;怎么使用&…

Springboot3 + SpringSecurity + JWT + OpenApi3 实现认证授权

Springboot3 SpringSecurity JWT OpenApi3 实现双token 目前全网最新的 Spring Security JWT 实现双 Token 的案例&#xff01;收藏就对了&#xff0c;欢迎各位看友学习参考。此项目由作者个人创作&#xff0c;可以供大家学习和项目实战使用&#xff0c;创作不易&#xff…

蓝桥 巧克力 贪心 排序 java

&#x1f351; 算法题解专栏 &#x1f351; 蓝桥 巧克力 输入 10 3 1 6 5 2 7 3 3 10 10输出 18&#x1f351; 思路 &#x1f364; 前边日期安排后影响后边的安排&#xff0c;但后边的安排不会影响前边的安排 &#x1f364; 从后往前步步贪心实现局部最优&#xff1a;在可选…

C语言,你觉得难吗?

C语言&#xff0c;众所周知&#xff0c;作为许多学校的编程入门课程&#xff0c;它并非易如反掌&#xff0c;甚至可称为最具挑战性的语言之一。学习C语言的难点不在于其语法&#xff0c;因为它的语法知识点并不繁多。其真正难以掌握之处在于如何运用这些简单的指令设计出复杂的…

企业课(理论)

数据链路层 IP地址&#xff1a;32bit 十进制、二进制表示 Mac地址&#xff1a;48bit 十六进制 &#xff08;0-9&#xff0c;a-f&#xff09; Mac地址&#xff1a; 单播Mac地址&#xff1a;一对一 48bit第八bit为0 组播Mac地址&#xff1a;一对多 48bit第八b…

iOS app上架截屏尺寸 5.5英寸:1242x2208 6.5英寸:1242x2688

5.5英寸和6.5英寸的iphone的截屏必须上传 5.5英寸&#xff1a;1242x2208 6.5英寸&#xff1a;1242x2688

not in 查不出数据

当not in (idList) 里面 id存在空时&#xff0c;not in null 等同于 !null, 我们知道数据库判断空是is null &#xff0c;如果用!null就查不到数据了

缓存一致性

《缓存更新的套路》 -陈皓 &#xff08;不考虑二步失败&#xff0c;只考虑并发状况&#xff09; 先指出了”先删除缓存&#xff0c;再更新DB“策略在并发时存在的一致性问题 说明cache aside缓存模式&#xff0c;其更新为“先更新DB&#xff0c;再让缓存失效”模式&#xff08…