// 改变函数的this指向
        // 先记住一句话 : 箭头函数不能改变this指向
        // 语法1: call() 方法
        //        在调用函数时使用
        //        在调用的函数名称后,添加 点 call
        //        调用函数的()中,应该赋值实参
        //        第一个实参是,改变的this指向对象
        //        之后的参数是原始函数本身应该具有的函数实参
        // 语法2: apply() 方法
        //        在调用函数时使用
        //        在调用的函数名称后,添加 点 apply
        //        调用函数的()中,应该赋值实参
        //        第一个实参是,改变的this指向对象
        //        第二个参数必须是数组的形式,数组中的数据单元,是原始函数,调用是应该输入的实参
        // 语法3: bind() 方法
        //        生成返回一个新的函数
        //        新的函数,程序等都与原始函数相同,只是this指向不同
        
        // 定义在对象obj1中的函数fun,this指向应该是对象obj1
        const obj1 = {
            name:'张三',
            fun:function(a,b,c,d,e){
                console.log(a,b,c,d,e);
                console.log(this);
            }
        }
        const obj2 = {
            name:'李四',
        }
        // obj1.fun('a','b','c','d','e');
        // 在调用的函数名fun之后,添加 点call
        // 第一个参数是obj2,表示,函数fun的this指向,改变为obj2
        // 第二个参数之后,都是fun函数本身,在调用时,应该输入的实参
        // obj1.fun.call(obj2,100,200,300,400,500);
        // 在调用的函数名fun之后,添加 点apple
        // 第一个参数是obj2,表示,函数fun的this指向,改变为obj2
        // 第二个参数,以数组的形式,输入原始函数fun,执行时必须输入的实参
        // obj1.fun.apply(obj2 , [100,200,300,400,500] );
        // 不是在指定调用 函数 fun
        // 是在生成一个新的函数,要使用变量存储新的函数,或者绑定给其他程序
        
        // 新的函数,只是this改变,与原始函数fun,其他都一样
        // fun有5个形参,新函数f 也有5个形参
        // 执行时 需要输入 5个实参
        // 如果,在执行bind时,没有输入实参,在调用时就必须要输入实参
        // const f = obj1.fun.bind(obj2);
        // f(1,2,3,4,5);
        // 如果,在执行bind时,输入了实参,那么就会执行输入的实参
        // 调用时再输入数据无效
        const f = obj1.fun.bind(obj2 , 1,2,3,4,5);
        f(100,200,300,400,500);
        // 我们一般执行bind时,不会输入实参,便于灵活输入实参
        // 特殊情况下会绑定实参
        //     绑定函数名称时,无法输入实参
        //     可以使用bind方法
        //     this指向不改变,还是原始函数的this指向
        //     通过bind方法,绑定执行时需要的实参

改变函数中的this指向的更多相关文章

  1. 改变函数中的 this 指向——神奇的call,apply和bind及其应用

    在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...

  2. JS回调函数中的this指向(详细)

    首先先说下正常的this指向问题 什么是this:自动引用正在调用当前方法的.前的对象. this指向的三种情况 1. obj.fun()     fun中的this->obj,自动指向.前的对 ...

  3. js闭包中的this(匿名函数中的this指向的是windows)

    js闭包中的this(匿名函数中的this指向的是windows) 一.总结 1.普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样 2.让匿名函数中的thi ...

  4. 如何改变函数内部 this 的指向

    一.函数内 this 的指向 1. this 的指向是当调用函数时确定的,调用的方式不同,this 的指向也就不同. 1.1 this 一般是指向调用者. 函数类型 this 的指向 普通函数 Win ...

  5. Javascript回调函数中的this指向问题

    使用js中的定时器(setInterval,setTimeout),很容易会遇到this指向的问题. 直接上例子: 1 var name = 'my name is window'; 2 var ob ...

  6. React之函数中的this指向

    我们都知道在React中使用函数时,有两种写法,一是回调函数,二是直接调用,但需要在构造函数中绑定this,只有这样,函数中的this才指向本组件 总结一下没有绑定this的函数中的this指向 不管 ...

  7. JS的一些总结(函数声明和函数表达式的区别,函数中的this指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)

    一.函数声明和函数表达式的区别: 函数声明放在if——else语句中,在IE8中会出现问题 函数表达式则不会 <script> if(true){ function f1(){ conso ...

  8. 彻底搞清函数中的this指向

    近日阅读<javascript设计模式与开发实践> 书中的apply和call调用函数层出不穷,很多妙用: 函数中的this是根据调用方式来决定的 函数调用方式有4中 1.直接调用 a(. ...

  9. 普通函数跟箭头函数中this的指向问题

    箭头函数和普通函数的区别如下. 普通函数:根据调用我的人(谁调用我,我的this就指向谁) 箭头函数:根据所在的环境(我再哪个环境中,this就指向谁) 一针见血式总结: 普通函数中的this: 1. ...

  10. 箭头函数,闭包函数中的this指向

    在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...

随机推荐

  1. oracle SQL 进行时间冲突判断

    oracle SQL 进行时间冲突判断 背景:写一个预约模块,主要的限制就是时间限制,有冲突的时间段就不能进行预约 设数据库中的时间为A开始,A结束 设要判断的时间为B开始,B结束 则判断有在B开始时 ...

  2. HarmonyOS NEXT应用开发之预加载so并读取RawFile文件

    介绍 本示例主要介绍在TaskPool子线程中使用 dlopen 预加载 so 库并使用句柄调用库函数的方法,以及在Native中使用 pread 系统函数读取Rawfile文件的部分文本内容,并添加 ...

  3. [PHP] Laravel cast array 数据库存 json 时的 unicode 编码问题

    在模型上设置 accessor 和 mutator,将数组转为 json,并设置 json 选项. class User extends Model { public function setOpti ...

  4. [FE] ServerSideRender 加上 PWA 特性的一种处理方式

    SSR 和 PWA 这两块分开讲,需要做不少的处理,现在我们有了一种简便的方式来处理它,就是使用 Quasar 框架. Quasar 支持了 SPA.SSR.PWA.Mobile APP.Electr ...

  5. STM32定时器原理

    一.简介 不同的芯片定时器的数量不同,STM32F10x中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器. 基本定时器:TIM6. ...

  6. EXCEL-统计sheet个数、统计指定单元格个数

    Excel的函数,可以直接在里面执行 1.统计sheet个数 =SHEETS() 参考:https://office.tqzw.net.cn/excel/excel/8168.html 2.统计单元格 ...

  7. 快速搭建Zookeeper和Kafka环境

    前言 由于项目需要涉及到zookeeper和Kafka的使用,快速做了一篇笔记,方便小伙伴们搭建环境. zookeeper 官方定义 What is ZooKeeper? ZooKeeper is a ...

  8. .NET开源、功能强大、跨平台的图表库 - LiveCharts2

    前言 今天大姚给大家分享一个.NET开源(MIT License).功能强大.简单.灵活.跨平台的图表.地图和仪表库:LiveCharts2.   项目介绍 LiveCharts2是一个.NET开源. ...

  9. Ubuntu的apt-get/yarm/wget命令详解

    目录 一.查看本机是否安装软件 二.apt-get 三.yum 四.wget apt-cache和apt-get是apt包的管理工具, 他们根据/etc/apt/sources.list里的软件源地址 ...

  10. ansible(18)--ansible的selinux模块

    1. selinux模块 功能:管理远端主机的 SELINUX 防火墙: 主要参数如下: 参数 说明 state Selinux模式:enforcing.permissive.disabled pol ...