最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript中的bind方法的代码示例

来源:懂视网 责编:小采 时间:2020-11-27 19:27:15
文档

JavaScript中的bind方法的代码示例

JavaScript中的bind方法的代码示例:本篇文章给大家带来的内容是关于JavaScript中的bind方法的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。之前已经实现过了call,apply和new。今天顺便把bind也实现下。首先:bind方法返回的是一个绑定this后的函数,并且该函
推荐度:
导读JavaScript中的bind方法的代码示例:本篇文章给大家带来的内容是关于JavaScript中的bind方法的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。之前已经实现过了call,apply和new。今天顺便把bind也实现下。首先:bind方法返回的是一个绑定this后的函数,并且该函

本篇文章给大家带来的内容是关于JavaScript中的bind方法的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

之前已经实现过了call,apply和new。今天顺便把bind也实现下。
首先:

  1. bind方法返回的是一个绑定this后的函数,并且该函数并没有执行,需要手动去调用。(从这一点看bind函数就是一个高阶函数,而且和call,apply方法有区别)。
  2. bind方法可以绑定this,传递参数。注意,这个参数可以分多次传递。
  3. 如果bind绑定后的函数被new了,那么此时this指向就发生改变。此时的this就是当前函数的实例。
  4. 构造函数上的属性和方法,每个实例上都有。

ok,上代码~

Function.prototype.mybind = function(context){
 let that = this;
 let args1 = Array.prototype.slice.call(arguments,1);
 let bindFn = function(){
 let args2 = Array.prototype.slice.call(arguments);
 return that.apply(this instanceof bindFn?this:context,args1.concat(args2)); 
 }
 let Fn = function(){};
 Fn.prototype = this.prototype;
 bindFn.prototype = new Fn();
 return bindFn;
}

首先 获取到第一次传递的参数args1,此处要做截取处理,因为第一个参数是this。接下来声明一个函数bindFn,在该bindFn中获取了第二次传的参数args2,并且返回了that的执行。此处的that就是原函数,执行该原函数绑定原函数this的时候要注意判断。如果this是构造函数bindFn new出来的实例,那么此处的this一定是该实例本身。反之,则是bind方法传递的this(context)。最后再把两次获得的参数通过concat()连接起来传递进去,这样就实现了前3条。
最后一条:构造函数上的属性和方法,每个实例上都有。 此处通过一个中间函数Fn,来连接原型链。Fn的prototype等于this的prototype。Fn和this指向同一个原型对象。bindFn的prototype又等于Fn的实例。Fn的实例的__proto__又指向Fn的prototype。即bindFn的prototype指向和this的prototype一样,指向同一个原型对象。至此,就实现了自己的bind方法。
代码写好了, 测试一下吧~

Function.prototype.mybind = function(context){
 let that = this;
 let args1 = Array.prototype.slice.call(arguments,1);
 let bindFn = function(){
 let args2 = Array.prototype.slice.call(arguments);
 return that.apply(this instanceof bindFn?this:context,args1.concat(args2)); 
 }
 let Fn = function(){};
 Fn.prototype = this.prototype;
 bindFn.prototype = new Fn();
 return bindFn;
}

let obj = {
 name:'tiger'
}

function fn(name,age){
 this.say = '汪汪~';
 console.log(this);
 console.log(this.name+'养了一只'+name+','+age+'岁了 ');
}

/** 第一次传参 */
let bindFn = fn.mybind(obj,'

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

JavaScript中的bind方法的代码示例

JavaScript中的bind方法的代码示例:本篇文章给大家带来的内容是关于JavaScript中的bind方法的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。之前已经实现过了call,apply和new。今天顺便把bind也实现下。首先:bind方法返回的是一个绑定this后的函数,并且该函
推荐度:
标签: 中的 方法 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top