call apply分分钟让你上手

大家好,我是热狗得小舔狗!

call,apply,bind的用法以及区别

  1. 首先

作用: call()、apply()、bind() 是用来改变上下文对象的,就是改变this的指向!

call()用法
举例
	    let fn = function(a,b){
        	console.log(this,a,b);  //本来this -> fn
    	}
    let obj = {name:"obj"};
    fn.call(obj,1,2);  // 调用call后
    //	此时 this -> obj   a->1  b->2
    //	打印 {name: 'obj'} 1 2

    fn.call(); fn.call(null); fn.call(undefined);
    // 非严格模式	此时 this -> window a -> undf  b->undf
    // 严格模式		此时 this -> 参1(分别: undf, null, undf)
apply()用法

与call()语法相似,只是传参用数组或类数组的形式

	fn.call(obj, 1, 2)
	fn.apply(obj, [1, 2])
举例
	    let fn = function(a,b){
        	console.log(this,a,b);  //本来this -> fn
    	}
    let obj = {name:"obj"};
    fn.apply(obj, [1, 2]);  // 调用apply后
    //	此时 this -> obj   a->1  b->2
    //	打印 {name: 'obj'} 1 2

    fn.apply(); fn.apply(null); fn.apply(undefined);
    // 非严格模式	此时 this -> window a -> undf  b->undf
    // 严格模式		此时 this -> 参1(分别: undf, null, undf)

bind()用法

语法上面来讲还是和call()相似,区别在于返回值,bind()返回的是一个新函数

举例
	    let fn = function(a,b){
        	console.log(this,a,b);  //本来this -> fn
    	}
    let obj = {name:"obj"};
    let newfn = fn.bind(obj,1,2);  // 调用bind后 返回函数 
   	// 并没有执行
   	newfn();  // 执行函数 控制台打印
总结

区别:
call()与apply()相似 只是传参方式不同
bind()返回的是一个新函数, 不会立即执行,可以在你需要的时候调用
总之根据自己的需求啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值