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 相关文章推荐
JQuery 学习笔记 选择器之一
Jul 23 Javascript
js中replace的用法总结
Dec 27 Javascript
javascript实现按回车键切换焦点
Feb 09 Javascript
实现音乐播放器的代码(html5+css3+jquery)
Aug 04 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
JS数组合并push与concat区别分析
Dec 17 Javascript
jquery滚动条插件(可以自定义)
Dec 11 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
详解React 16 中的异常处理
Jul 28 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
深入了解JavaScript词法作用域
Jul 29 Javascript
vue祖孙组件之间的数据传递案例
Dec 07 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 session 预定义数组
2009/03/16 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
pandas 时间格式转换的实现
2019/07/06 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
python操作链表的示例代码
2020/09/27 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
演讲稿开场白
2014/01/13 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
实习老师离校感言
2014/02/03 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
学生检讨书
2015/01/27 职场文书
小学大队长竞选稿
2015/11/20 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL