0
点赞
收藏
分享

微信扫一扫

call()、apply()、bind()的用法及区别

看山远兮 2022-02-05 阅读 62

相同点:

call()、apply()、bind()都是用来重定义this这个对象的

不同点:

1、调用方式

var obj={
	name:'小白',
	age:'4',
	info:function(){
		console.log(this.name+"年龄"+this.age)
	}
}

var boy={
	name:"小新",
	age:'8'
}

obj.info();				// 小白年龄4

obj.info.call(boy);		// 小新年龄8
obj.info.apply(boy);	// 小新年龄8
obj.info.bind(boy)();	// 小新年龄8

由上可知,bind方法的调用相比call和apply方法后面多了一个();

2、传参情况

var obj={
	name:'小白',
	age:'4',
	info:function(f,t){
		console.log(this.name+"年龄"+this.age,'来自'+this.f+'去往'+this.t)
	}
}
var boy={
	name:"小新",
	age:'8'
}

obj.info.call(boy,"成都",'上海');	// 小新年龄8 来自成都去往上海
obj.info.apply(boy,["成都",'上海']);	// 小新年龄8 来自成都去往上海
obj.info.bind(boy,"成都",'上海')();	// 小新年龄8 来自成都去往上海
obj.info.bind(boy,["成都",'上海'])();	// 小新年龄8 来自成都,上海去往undefined

从上面四个结果不难看出:

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:

call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,‘成都’, … ,‘string’ )。

apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,[‘成都’, …, ‘string’ ])。

bind 除了返回是函数以外,它 的参数和 call 一样。

举报

相关推荐

0 条评论