apply()和call()二者都是用来改变上下文执行,只是传递的参数不一样
Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)apply是将args数组一个一个与Function类中的参数一一对应
Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:这个对象将代替Function类里this对象
params:这个是一个参数列表,Function类的参数一一对应
示例.ts
add(a, b) { return this + a + b; }
mutilAdd() { var param1 = 3; var param2 = 4; //将add中的上下文this变成了1 var res1 = this.add.call(1, param1, param2)//结果为8 var res2 = this.add.apply(1, [param1, param2])//结果为8 }
示例.js
function ProA(name, skill) { this.name = name; this.skill = skill; this.fn = function () { console.log("my name is " + this.name + ", my skills are " + this.skill); console.log(this) } } function ProB(name, skill) { console.log(this) //此处改动产生的效果为: //在ProB内,通过apply,执行,并改动ProA中的执行上下文(this), //及修改ProA的参数为ProB所接收的参数 //那么在new调用ProB时,相当于调用了被修改了执行上下文和参数之后的ProA //ProB的this传入ProA后执行this相关的参数函数赋值,由于ProA中的this是ProB的所以ProB就拥有了参数name、skill和函数fn ProA.call(this, name, skill) } var A = new ProA("AAA", "sing"); A.fn(); //my name is AAA, my skills are sing var B = new ProB("BBB", "dance"); B.fn();
参考:代码
标签:Function,name,call,apply,skill,ProB,ProA From: https://www.cnblogs.com/sugarwxx/p/17415325.html