js中改变this指向的三种方式

news/2025/2/12 18:11:19/

js中改变this指向的三种方式

  • 1、call方法
  • 2、apply方法
  • 3、bind方法

1、call方法

使用 call 方法调用函数,同时指定函数中 this 的值,使用方法如下代码所示:

<script>const obj = {uname: '刘德华'}function fn(x, y) {console.log(this) console.log(x + y)}// 1. 调用函数  // 2. 改变 this 指向fn.call(obj, 1, 2)
</script>

运行结果如下:
在这里插入图片描述
总结:

  1. call 方法能够在调用函数的同时指定 this 的值
  2. 使用 call 方法调用函数时,第1个参数为 this 指定的值
  3. call 方法的其余参数会依次自动传入函数做为函数的参数

2、apply方法

使用 call 方法调用函数,同时指定函数中 this 的值,使用方法如下代码所示:

<script>const obj = {age: 18}function fn(x, y) {console.log(this) // {age: 18}console.log(x + y)}// 1. 调用函数// 2. 改变this指向 //  fn.apply(this指向谁, 数组参数)fn.apply(obj, [1, 2])// 3. 返回值   本身就是在调用函数,所以返回值就是函数的返回值// 使用场景: 求数组最大值// const max = Math.max(1, 2, 3)// console.log(max)const arr = [100, 44, 77]const max = Math.max.apply(Math, arr)const min = Math.min.apply(null, arr)console.log(max, min)// 使用场景: 求数组最大值console.log(Math.max(...arr))
</script>

运行结果如下:
在这里插入图片描述
总结:

  1. apply 方法能够在调用函数的同时指定 this 的值
  2. 使用 apply 方法调用函数时,第1个参数为 this 指定的值
  3. apply 方法第2个参数为数组,数组的单元值依次自动传入函数做为函数的参数

3、bind方法

bind 方法并不会调用函数,而是创建一个指定了 this 值的新函数,使用方法如下代码所示:

<script>const obj = {age: 18}function fn() {console.log(this)}// 1. bind 不会调用函数 // 2. 能改变this指向// 3. 返回值是个函数,  但是这个函数里面的this是更改过的objconst fun = fn.bind(obj)// console.log(fun) fun()// 需求,有一个按钮,点击里面就禁用,2秒钟之后开启document.querySelector('button').addEventListener('click', function () {// 禁用按钮this.disabled = truewindow.setTimeout(function () {// 在这个普通函数里面,我们要this由原来的window 改为 btnthis.disabled = false}.bind(this), 2000)   // 这里的this 和 btn 一样})
</script>

运行结果如下:
在这里插入图片描述
注:bind 方法创建新的函数,与原函数的唯一的变化是改变了 this 的值。


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

相关文章

企业微信可以转账吗

不可以。企业微信没有转账功能&#xff0c;只有发红包功能&#xff0c;企业微信支持给客户、企业微信好友以及企业微信内外部群聊发送红包。 如果是公对公的业务&#xff0c;员工可以使用对外收款&#xff0c;直接进入公司的账户&#xff0c;企业微信会向开通的对外收款收取手续…

php微信提现(商家转账到零钱)

/*** 微信提现**/public function ty_commission(){//这里是自己的逻辑代码,查询这个提现订单的信息等.....$batch_name = 余额提现;//转账的名称$out_trade_no = $info[order_sn

个人微信api接口调用-转账发红包

个人微信api接口调用-转账发红包 /*** 微信转账发红包* author wechatno:tangjinjinwx* blog http://www.wlkankan.cn*/Asyncpublic void handleMsg(ChannelHandlerContext ctx, TransportMessage vo, String contentJsonStr) {try {log.debug(contentJsonStr);SendLuckyMoneyT…

小程序微信商家API V3对接转账到零钱(JAVA)

前言 新开发的小程序要调起微信支付,关于微信支付API V3对接(Java)的资料不是很多,研究了很久文档和SDK里的代码,也踩了很多坑,特此记录。 本文包括微信商家转账到零钱 依赖: <!-- json转换 --><!-- https://mvnrepository.com/artifact/com.alibaba/fastjs…

微信支付与微信转账的区别

目前在市场上&#xff0c;经常看到一些小的店铺&#xff0c;收银台那里贴着一张微信或支付宝的二维码&#xff0c;很多商家可能就已经认为自己开通微信支付、支付宝支付了&#xff1b;其实这大部分只是微信和支付宝的转账功能&#xff1b; Tips 很多商家并不清楚这两种方式的区…

基于微信云开发的商家转账至零钱

基于微信云开发的商家转账至零钱 相关简介开通功能阅读文档技术框架配置环境编写代码注意事项相关参考 相关简介 本篇文章主要介绍如何通过微信云开发的云函数实现商家转账到零钱。&#xff08;让那些没有服务器的程序员也可以练练手&#xff09; 开通功能 微信官方文档 本菜…

【Wechat】微信支付APIV3(商户) 接入批量转账到零钱

​ 微信支付V3&#xff08;商户&#xff09;》批量转账到零钱 微信支付V3版本&#xff0c;微信SDK,内部封装了部分方法&#xff0c;参照着官方Demo&#xff0c;下载地址&#xff1a; GitHub - wechatpay-apiv3/wechatpay-apache-httpclient: 微信支付 APIv3 Apache HttpClie…