在javascript中,每个对象都有一个apply()方法和一个call()方法。它可以代替另一个对象调用方法,将函数的上下文改变为thisObj指向的新对象。当我们传递call和apply到this的点时,不传递任何参数,默认将this的点改为windows,当有参数时,会指向第一个参数。两者的区别:apply最多只能有两个参数——新的this对象和一个数组argArray。如果将多个参数传递给此方法,则所有参数都写入此数组。当然,即使只有一个参数,也必须写入数组。如果argArray不是有效的数组或参数对象,则会引发TypeError。如果既没有提供argArray也没有提供thisObj,则使用Global对象作为thisObj,不能传递任何参数。call可以接受多个参数,第一个参数和apply一样,后面是一个参数列表。该方法主要用于js对象方法相互调用时保持当前this实例指针一致,或者在特殊情况下改变this指针。如果没有提供thisObj参数,则使用Global对象作为thisObj。case://apply()方法obj.apply(thisObj,['arg1','arg2'])//call()方法obj.call(thisObj,'arg1','arg2','arg3')在thisObj之上继承了obj的属性和方法//例1:functionadd(j,k){returnj+k;}functionsub(j,k){returnj-k;}//sub继承了add方法console.log(add(5,3));//8console.log(add.call(sub,5,3));//8console.log(add.apply(sub,[5,3]));//8//添加继承子方法console.log(sub(5,3));//2console.log(sub.call(add,5,3));//2console.log(sub.apply(add,[5,3]));//2//示例2:varperson=function(){this.name="Tom";this.age=22;}varother={};console.log(other);//{}//其他继承person的属性person.call(other);console.log(other);//{name:"Tom",age:22}bind绑定:绑定后的call()方法和apply()方法都会被执行立即执行,但bind不会立即执行add.bind(sub,5,3);//返回add方法函数体add.bind(sub,5,3)();//8【编者推荐】怎么做这7个Linux命令你用过吗?也许这是迄今为止最好的Git教程。微信小程序基础设施解析后悔药来了!iOS15刷机降级iOS14.6详细图文教程基于WebAssembly的热门语言项目
