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 相关文章推荐
javascript下高性能字符串连接StringBuffer类
Aug 16 Javascript
js用正则表达式来验证表单(比较齐全的资源)
Nov 17 Javascript
js实现动态改变字体大小代码
Jan 02 Javascript
window resize和scroll事件的基本优化思路
Apr 29 Javascript
原生js实现addClass,removeClass,hasClass方法
Apr 27 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
Dec 07 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
May 08 Javascript
详解从Vue-router到html5的pushState
Jul 21 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
Aug 19 Javascript
微信小程序国际化探索实现(附源码地址)
May 20 Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 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 nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
php实例化一个类的具体方法
2019/09/19 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
AngularJS中filter的使用实例详解
2017/08/25 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python的pip安装以及使用教程
2018/09/18 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
优秀的茶餐厅创业计划书
2014/01/03 职场文书
给老师的检讨书
2014/02/11 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
商业门面租房协议书
2014/11/25 职场文书