zoukankan      html  css  js  c++  java
  • 改变函数中的this指向

      // 改变函数的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方法,绑定执行时需要的实参
    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    函数
    拉取代码到本地
    逻辑位运算符 以及 布尔运算符&&、||
    JS中substr与substring的区别
    ? :和!:的用法含义及es6语法...
    JS中attribute和property的区别
    并发、并行的理解
    斑鸠云商小程序记住账号和密码
    js中的foreach用法
    指针与数组
  • 原文地址:https://www.cnblogs.com/ht955/p/14092163.html
Copyright © 2011-2022 走看看