function Student(name){
this.name=name
this.showInfo=function(){
console.log(this.name)
}
this.abc=function(a,b,c){
console.log(this.name+a+b+c)
}
}
var s1=new Student("王一")
var s2=new Student("王二")
s1.showInfo.call(s2) //s1方法内部的this指向s2 结果输出为王二
s2.showInfo.call(s1) //s2方法内部的this指向s1 结果输出为王一
s1.abc.call(s2,1,2,3);//王二123、、直接调用
s1.abc.apply(s2,[1,2,3]) //s1对象改变为s2并传参 输出结果为王二123
call和apply的区别:call后面可以有N个参数 需要几个传几个(参数列表逗号隔开) ,aplay参数只有两个 第一个参数是改变的对象 第二个就是把所有需要改的参数整合成一个数组----apply(改变的对象,[ 数组 ])
max 如何用apply方法
var s=Math.max(1,2,3,23,22);//不能直接改变对象,无法调用
console.log(s) //23
var s=[1,2,3];
var r=Math.max.apply(null,s)//没有改变的对象,所以直接赋值为空, s作为apply方法可以直接展开为数组;
console.log(r);//输出结果为最大值3
min 如何用apply方法
var s=[1,2,3]; var r=Math.min.apply(null,s)//没有改变的对象,所以直接赋值为空; console.log(r);//输出结果为最小值1