当前位置: 首页 > Web前端 > JavaScript

call、apply、bind的用法和区别_0

时间:2023-03-27 10:54:29 JavaScript

先看看三个方法的基本语法:1.call方法的作用:就是调用一个函数,专门用来修饰里面的this点方法,并指定这个可以代表谁,比如fn。call(obj)表示调用函数fn,this指向obj对象调用语法:functionname.call(object,parameter1,parameter2,...);实例:函数测试(a,b){控制台。日志(这个);控制台日志(a+b);}测试(1,2);//窗口3varobj={name:'zjy'};window.test.call(obj,3,5);//{name:'zjy'}8分析:不使用call方法时,测试方法的this指向全局对象窗口,使用call方法时,测试的this点由window为obj对象,后面的参数为对应方法的形参顺序2.apply方法的作用:同call方法一样,也是修饰方法内部的this点。它们的区别在于apply的第二个参数必须是数组(部署Iterator接口的类Array对象也可以)//?apply使用语法//函数名.apply(object,[参数1,参数2,...]);示例:函数测试(a,b){console.log(this);控制台日志(a+b);}测试(1,2);//窗口3varobj={name:'zjy'};window.test.apply(obj,[3,5]);//{name:'zjy'}8分析:不使用apply方法时,测试方法的this指向全局对象窗口,使用apply方法时,测试的this点由window为obj对象,后面的数组参数是将数组中的元素依次对应到测试方法的形参位置。3.bind方法的作用:改变this的指向,即绑定函数的this,返回绑定的新函数如varfb=fn.bind(obj);窗口.fb();无论谁调用fb函数,函数的this都会指向obj//instance:varobj={key:"value"}varfoo=function(){console.log(this)}foo.bind(obj)()//obj解析:解析:thisinfoo()时的bind方法不使用它指向全局对象window,使用bind方法后指向obj对象作用:前两个是改变this的指向,bind是改变this的指向,将this方法复制到return总结apply、call、bind三者的区别:1、三者都可以改变函数的this对象指向。2、三个中的第一个参数是this要指向的对象。如果没有该参数或参数未定义或为空,则默认指向全局窗口。3.三个都可以传参数,但是apply是一个数组,call是一个参数列表,apply和call是一次性传入参数,而bind可以分为多次传入。4.bind是绑定this后返回函数,方便后面调用;apply和call立即执行。