用法
- function.apply(obj,[...args]);
- function.call(obj,args,args,...);
- function.bind(obj,args,args,...)();
效果
执行function
将function中的this替换成obj再执行
传递参数为obj后面的部分
function show(...args){
console.log(this.name,args);
}
var obj={
name:"AAA"
};
show.apply(obj,[1,2,3]);
show.call(obj,1,2,3);
show.bind(obj,1,2,3)();
输出结果如下
如果执行的是构造函数,那么实际上是继承了构造函数的属性与方法
function Father(){
this.name="James";
this.say=function(){
console.log("I am James");
}
}
var son={
sex:"boy"
};
Father.apply(son);
console.log(son);
输出结果为
区别
-
apply()只接受两个参数,第一个为替换this的对象,第二个为记录传递参数的数组
- call()接受N个参数,第一个为替换this的对象,第二第三第三..都可以是传递的参数
- bind()接受的参数与call相同,但是返回的是一个函数,需要加()再执行一次