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 multibox 全选
Mar 22 Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
js 实现菜单左右滚动显示示例介绍
Nov 21 Javascript
JS实现清除指定cookies的方法
Sep 20 Javascript
JS小游戏之仙剑翻牌源码详解
Sep 25 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
Jul 24 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
Vue运用transition实现过渡动画
May 06 Javascript
DatePickerDialog 自定义样式及使用全解
Jul 09 Javascript
WebWorker 封装 JavaScript 沙箱详情
Nov 02 Javascript
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
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面向对象编程快速入门
2006/12/14 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
php 文件上传实例代码
2012/04/19 PHP
php 地区分类排序算法
2013/07/01 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
php中stream(流)的用法
2014/03/25 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jquery选择器中的空格与大于号>、加号+与波浪号~的区别介绍
2016/06/24 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python实现的建造者模式示例
2018/08/06 Python
Python语言进阶知识点总结
2019/05/28 Python
python pip如何手动安装二进制包
2020/09/30 Python
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
中学生操行评语大全
2014/04/24 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
行政介绍信范文
2015/05/04 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL