call,apply实现bind以及call和apply的主要作用

博客介绍了call和apply的主要功能,包括改变函数体内部this指向、实现bind功能、借用其他对象方法以实现继承。还指出call和apply的区别在于参数不同,apply只有两个参数,第二个是数组或类数组对象。此外,说明了bind方法的特点及用call、apply实现其功能的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

call,apply的主要功能:

  • 改变调用他们的函数体内部this的指向:指向第一个参数(为null指向宿主对象:浏览器中就是window对象!)
  • 实现bind的功能
  • 借用其他对象的方法。也就是说可以实现继承(构造函数继承或者构造函数和原型链继承组合式继承或者寄生组合式继承)

区别:参数不一样而已啦~apply只有两个参数,第二个是一个数组或者类数组对象

1.

    var banana={
   			color:"yellow"
   		}
   		var apple={
   			color:"red",
   			say:function(){//a,b
   				console.log(this.color)
   				//console.log([a,b])
   			}
   		}
   		var orange={
   			color:"orange"
   		}
   		var leaf={
   			color:"green"
   		}
   		apple.say();
   		apple.say.call(orange);//改变this的指向
   		apple.say.bind(orange)();//

运行结果:

2.call apply实现bind的功能:bind的最大特点:

bind() 方法会创建一个新函数,当这个新函数被调用时,它的 this 值是传递给 bind() 的第一个参数, 它的参数是 bind() 的其他参数和其原本的参数。(这么一说是不是就想起来用闭包实现了呢,其实就是return一个新函数且新函数的参数和bind函数的参数合并)

   		var banana={
   			color:"yellow"
   		}
   		var apple={
   			color:"red",
   			say:function(a,b,c){//
   				console.log(this.color)
   				console.log([a,b])
   			}
   		}
   		var orange={
   			color:"orange"
   		}
   		var leaf={
   			color:"green"
   		}
   		apple.say();
   		apple.say.call(orange);//改变this的指向
   		apple.say.bind(orange)();//同样改变了this的指向同时生成了一个绑定函数 可以调用绑定函数实现效果
   		// 怎么实现bind呢
   		Function.prototype.mybind=function(){
   			var self=this;//保存函数体中的this
   			var context=Array.prototype.slice.call(arguments)[0]//要本函数的第一个参数
    		var args=Array.prototype.slice.call(arguments,1);//要本函数除了第一个参数以外的其他参数
   			return function(){

   				return self.apply(context,args.concat(Array.prototype.slice.call(arguments)))//结合这个函数的参数列表
   			}

   		}
   		apple.say.mybind(leaf)(1,2);
   		apple.say.mybind(leaf,1)(2);

 

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值