call,apply,bind

1.这三个方法都能改变this的指向

2.代码实战

   let obj1 = {name: "小红",age: 20,fn: function () {console.log('当前this的指向',this);console.log(`我叫${this.name},今年${this.age}岁`);},};obj1.fn();

这里的代码,obj1是一个对象,里面有属性name和age 正常情况下我们调用这个对象的方法this的指向是:

从打印的结果来看,谁调用的就指向谁,很明显是obj1这个对象进行调用的

   let obj2 = {name: "小明",age: 21,};

我们在这里又定义了一个新的对象obj2,对象里面同样有两个属性age和name,现在我们需要的是调用obj1对象的fn方法的时候 让this指向obj2,这个时候就可以使用call来改变this的指向。

(1).call方法也可以直接调用函数

调用完的结果是这个this指向了window,很明显这个结果不是我们想要的。

  obj1.fn.call(obj2)

新的打印结果:

这个结果很明显是我们想要的。

(2)通过apply方法

    obj1.fn.apply(obj2)

(3)通过bind方法

    obj1.fn.bind(obj2)

控制台里面什么都没用,修改:

    obj1.fn.bind(obj2)()

可以看出bind方法后面多出了一个()调用的过程。

3.call和apply的传参方式不同

(1)call的传参

    let obj1 = {name: "小红",age: 20,fn: function (name,jg) {console.log(`${name}是${jg}`);},};let obj2 = {name: "小明",age: 21,};obj1.fn.call(obj2,'冰红茶','3元')</script>

       

(2)apply的传参

  obj1.fn.apply(obj2,'冰红茶','3元')

代码报错了

正确的代码:  

    obj1.fn.apply(obj2,['冰红茶','3元'])

(3)可以看出call和apply的传参的形式是不一样的

call间接隔开的形式一个个进行传参,例如a,b,c

而apply是以数组[]的形式进行包裹着的。

4.总结

1.bind,call,apply都可以改变this的指向

2.call,applly的传参的方式不一样

3.注意bind改变指向后 需要在加()进行调用

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

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

相关文章

计数排序详解

前言&#xff1a;这篇文章会给大家把计数排序安排的明明白白&#xff0c;详细的讲解计数排序的原理 例子&#xff1a;现在我有一个数组不知道里面到底有多少个元素&#xff0c;但是我要把它进行排序&#xff0c;怎么排序呢&#xff1f; 我先随便拿一个数组&#xff08;你假装你…

Java JMM

JMM 全称: Java Memory Model (Java 内存模式)。 它是一种虚拟机规范, 用于屏蔽掉各种硬件和操作系统的内存访问差异, 以实现 Java 程序在各种平台下都能达到一致的并发效果。 主要规定了以下两点 一个线程如何以及何时可以看到其他线程修改过后的共享变量的值, 即线程之间共享…

I.MX6ULL_Linux_驱动篇(46)linux LCD驱动

LCD 是很常用的一个外设&#xff0c;在Linux 下LCD 的使用更加广泛&#xff0c;在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。本章我们就来学习一下如何在 Linux 下驱动 LCD 屏幕。 Linux 下 LCD 驱动简析 Framebuffer 设备 先来回顾一下裸机的时候 LCD 驱动是怎…

一次 k8s 升级,竟然导致滴滴故障 12 小时?

大家好&#xff0c;我是君哥。 前段时间滴滴的故障相信大家都知道了。中断业务 12 小时定级为 P0 级故障一点都不冤。 故障回顾 网上有传言是运维人员升级 k8s 时&#xff0c;本来计划是从 1.12 版本升级到 1.20&#xff0c;但是操作失误选错了版本&#xff0c;操作了集群降级…

2-5、包含多个段的程序

语雀原文链接 文章目录 1、概述2、代码段中使用数据示例1&#xff1a;不指定程序入口示例2&#xff1a;指定程序入口原理梳理 3、在代码段中使用栈例子1例子2 4、数据、代码、栈放入不同的段例子1&#xff1a;end start指定程序入口第一步&#xff1a;设置栈顶第二步&#xff…

Lambda表达式规则,用法

Lambda表达式是JDK8新增的一种语法格式 1.作用 简化匿名内部类的代码写法 Lambad用法前提&#xff1a;只能简化函数式接口&#xff08;一般加有Funcationallnterface&#xff09;&#xff08;有且仅有一个抽象方法&#xff09;的匿名内部类 匿名内部类&#xff1a;(本质是对…

Linux系统编程:进程间通信总结

管道 在Linux中&#xff0c;管道是一种进程间通信方式&#xff0c;它允许一个进程&#xff08;写入端&#xff09;将其输出直接连接到另一个进程&#xff08;读取端&#xff09;的输入。从本质上说&#xff0c;管道也是一种文件&#xff0c;但它又和一般的文件有所不同。 具体…

Dockerfile 指令的最佳实践

这些建议旨在帮助您创建一个高效且可维护的Dockerfile。 一、FROM 尽可能使用当前的官方镜像作为镜像的基础。Docker推荐Alpine镜像&#xff0c;因为它受到严格控制&#xff0c;体积小&#xff08;目前不到6 MB&#xff09;&#xff0c;同时仍然是一个完整的Linux发行版。 FR…

win11 powershell conda 激活环境后不显示环境名称

win11 powershell conda 激活环境后不显示环境名称 问题现象解决方法 问题现象 安装 Anaconda 后在 powershell 中激活环境后&#xff0c;命令行前面不显示环境名称 解决方法 在 powershell 中执行 conda init 重新打开 poweshell 出现以下问题&#xff0c;请参考 win11 p…

05-详解调用服务时负载均衡的配置及其原理

负载均衡 负载均衡的原理(通用) LoadBalanced注解用来拦截它所标记的RestTemplate发起的http请求, 底层是利用了一个名为Ribbon的组件来实现负载均衡功能(Cloud高版本已经弃用) LoadBalancerInterceptor的intercept方法会对RestTemplate的请求进行拦截 public class LoadBal…

Java - CAS在Java中的应用、CAS的三大问题

什么是CAS CAS&#xff08;Compare-and-Swap&#xff09;是一种乐观锁的实现方式&#xff0c;全称为“比较并交换”&#xff0c;是一种无锁的原子操作。 在并发编程中&#xff0c;我们都知道i操作是非线程安全的&#xff0c;这是因为 i操作不是原子操作 i语句只需要执行一条指令…

111.am40刷机折腾记4-firefly镜像-dp正常显示

1. 平台&#xff1a; rk3399 am40 4g32g 2. 内核&#xff1a;firefly的内核&#xff08;整体镜像&#xff09; 版本&#xff1a; linux4.4.194 3. 交叉编译工具 &#xff1a;暂时不编译 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff1a;boot-am40-202…