javascript中利用柯里化函数实现bind方法


Posted in Javascript onApril 29, 2016

柯理化函数思想:一个js预先处理的思想;利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的值进行相关的操作处理即可;
柯里化函数主要起到预处理的作用;
bind方法的作用:把传递进来的callback回调方法中的this预先处理为上下文context;

/**
* bind方法实现原理1
* @param callback [Function] 回调函数
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
function bind(callback,context) {
 var outerArg = Array.prototype.slice.call(arguments,2);// 表示取当前作用域中传的参数中除了fn,context以外后面的参数;
 return function (){
  var innerArg = Array.prototype.slice.call(arguments,0);//表示取当前作用域中所有的arguments参数;
  callback.apply(context,outerArg.concat(innerArg));
 }
}
/**
* 模仿在原型链上的bind实现原理(柯理化函数思想)
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
Function.prototype.mybind = function mybind (context) {
 var _this = this;
 var outArg = Array.prototype.slice.call(arguments,1);
 // 兼容情况下
 if('bind' in Function.prototype) {
  return this.bind.apply(this,[context].concat(outArg));
 }
 // 不兼容情况下
 return function () {
  var inArg = Array.prototype.slice.call(arguments,0);
  inArg.length === 0?inArg[inArg.length]=window.event:null;
  var arg = outArg.concat(inArg);
  _this.apply(context,arg);
 }
}

以上就是利用柯里化函数实现bind方法的相关代码,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
几种延迟加载JS代码的方法加快网页的访问速度
Oct 12 Javascript
jquery获得keycode的示例代码
Dec 30 Javascript
js导出txt示例代码
Jan 14 Javascript
javascript实现给定半径求出圆的面积
Jun 26 Javascript
详解vue-validator(vue验证器)
Jan 16 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 Javascript
React简单介绍
May 24 Javascript
前端主流框架vue学习笔记第二篇
Jul 26 Javascript
React Native验证码倒计时工具类分享
Oct 24 Javascript
解析Vue 2.5的Diff算法
Nov 28 Javascript
详解Vue.js中.native修饰符
Apr 24 Javascript
Js数组扁平化实现方法代码总汇
Nov 11 Javascript
Bootstrap模态对话框的简单使用
Apr 29 #Javascript
jquery UI Datepicker时间控件的使用及问题解决
Apr 28 #Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 #Javascript
onclick和onblur冲突问题的快速解决方法
Apr 28 #Javascript
如何使用jquery修改css中带有!important的样式属性
Apr 28 #Javascript
JavaScript String 对象常用方法总结
Apr 28 #Javascript
JavaScript Math 对象常用方法总结
Apr 28 #Javascript
You might like
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
jQuery动态添加
2016/04/07 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python中static相关知识小结
2018/01/02 Python
Python学习小技巧总结
2018/06/10 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
python 8种必备的gui库
2020/08/27 Python
python mock测试的示例
2020/10/19 Python
python爬虫请求头的使用
2020/12/01 Python
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
三八节主持词
2014/03/17 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
spring boot实现文件上传
2022/08/14 Java/Android