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 相关文章推荐
ajax 文件上传应用简单实现
Mar 03 Javascript
基于jquery实现控制经纬度显示地图与卫星
May 20 Javascript
ParseInt函数参数设置介绍
Jan 02 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
JavaScript显示表单内元素数量的方法
Apr 02 Javascript
Javascript中的方法和匿名方法实例详解
Jun 13 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
jQuery Chosen通用初始化
Mar 07 Javascript
jquery 键盘事件的使用方法详解
Sep 13 jQuery
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
详解javascript 变量提升(Hoisting)
Mar 12 Javascript
JavaScript WeakMap使用详解
Feb 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中看实例学正则表达式
2006/12/25 PHP
php下实现农历日历的代码
2007/03/07 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
深入理解Node module模块
2018/03/26 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
浅谈Python peewee 使用经验
2017/10/20 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
Python pandas如何向excel添加数据
2020/05/22 Python
大一学生假期实习的自我评价
2013/10/12 职场文书
留守儿童工作方案
2014/06/02 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
幼儿园辞职信
2015/05/13 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python