// 改变函数的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. 《c#高级编程》第4章C#4.0中的更改(七)——命名参数和可选参数

    一.概念 C#中的命名参数和可选参数是两种函数参数的特殊形式,它们可以提高代码的可读性和灵活性. 命名参数 命名参数允许我们在调用函数时指定参数名称,从而不必按照函数定义时的参数顺序进行传参.这样做可 ...

  2. CF1995E Long Inversions(贪心 + 差分)

    见代码 点击查看代码 //背景:夸一下自己,CF1955A~E均是自己想出来的,这道题思路是自己想的,唯一没想到用差分数组维护 //原理:贪心(想最左边的1开始,不可能对其左边包括自己操作了,否则又要 ...

  3. Java实现查看手机配置与功能

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 代码 `` ...

  4. 剑指offer29(Java)-顺时针打印矩阵(简单)

    题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5 ...

  5. 龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍 | 龙蜥技术

    简介: coolbpf,可以酷玩的BPF!来看看让BPF加了双翅膀的它究竟有多硬核? 文/系统运维 SIG(Special Interest Group) 引言 BPF 是一个新的动态跟踪技术,目前这 ...

  6. 【视频特辑】提效神器!如何用Quick BI高效配置员工的用数权限

    ​简介:随着企业数字化进程逐步加速,企业所产生和积累的数据资源日益增多.每当员工的用数权限发生变动,管理员都需要进行复杂繁琐的重复性配置流程,不仅耗时耗力还容易出错. 如何能便捷地对员工用数权限进行高 ...

  7. 比开源快30倍的自研SQL Parser设计与实践

    简介: SQL作为一种领域语言,最早用于关系型数据库,方便管理结构化数据:SQL由多种不同的类型的语言组成,包括数据定义语言,数据控制语言.数据操作语言:各数据库产品都有不同的声明和实现:用户可以很方 ...

  8. ARM 反汇编速成

    1.跳转指令 B   无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 BLX   带链接和状态切换的无条件跳转 B  loc_地址 BNE, BEQ 2.存储器与寄存器交互数据指令 ...

  9. [Cryptocurrency] rDAI 与 DAI 的区别, 如何质押 rDAI 获取利息

    以下合约操作需要在安装 MetaMask ( 以太坊的浏览器钱包 ) 的情况下进行. rDAI 通过和 DAI  1 : 1 互换得到,在 rDAI 提供的 dapp 上面操作 https://app ...

  10. ControlNet

    ControlNets 允许您选择图像来引导 AI,使其更紧密地跟随您的控制图像.您可以选择一个过滤器来预处理图像,以及已知(或自定义)控制网络模型之一. 虽然这听起来与图像到图像相似,但 Contr ...