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

call和apply的区别和用法

时间:2023-04-05 00:39:22 HTML5

call和apply的区别obj.call(thisObj,arg1,arg2,...);obj.apply(thisObj,[arg1,arg2,...]);call和apply都是bindobjtothisObj,作用是改变this的方向,唯一的区别是apply传递的参数必须以数组的形式传递,而call直接传递连续的参数。call和apply可以用在什么地方?当一个对象需要调用另一个对象中的方法时,可以使用call和apply。call和apply可以理解为继承另一个对象的方法。代码示例如下:首先,我们先创建两个对象,obj1和obj2varname="nameintheglobal";varobj1={name:"nameinobj1",func1:function(){console.log(this.name);},func2:function(a,b){console.log(a+b);返回a+b;}}varobj2={name:"nameinobj2"}如果obj2对象要调用obj1中的func1方法,则obj1.func1.call(obj2);//输出:nameobj1.func1.apply(obj2)inobj2;//输出:obj2中namecall和apply的第一个参数是obj1绑定的对象。如果obj1要绑定this,则obj1绑定全局,如:obj1.func1.call(this);//输出:全局中的名称obj1.func1.apply(this);//输出:nameintheglobal如果obj2对象要调用obj1的func2方法,则obj1.func2.call(obj2,1,2);//Output:3obj1.func2.apply(obj2,[1,2]);//输出:3此时func2方法是有参数的,call和apply中的第二个参数是传递给func2方法的参数,但是call参数是直接连续传递,而apply的参数传递是传递一个数组中的所有代码显示:varname="nameintheglobal";varobj1={name:"nameinobj1",func1:function(){console.log(this.name);},func2:function(a,b){console.log(a+b);返回a+b;}}varobj2={name:"nameinobj2"}obj1.func1.call(this);//Output:nameintheglobalobj1.func1.apply(this);//Output:nameintheglobalobj1.func1.call(obj2);//Output:nameinobj2obj1.func1.apply(obj2);//Output:nameinobj2obj1.func2.call(obj2,1,2);//Output:3obj1.func2.apply(obj2,[1,2]);//输出:3