apply() call() 和 bind() 的用法与区别

用法

  • 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相同,但是返回的是一个函数,需要加()再执行一次

猜你喜欢

转载自blog.csdn.net/Aproducer/article/details/82383611