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 相关文章推荐
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
Mar 17 Javascript
客户端js性能优化小技巧整理
Nov 05 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
表单验证正则表达式实例代码详解
Nov 09 Javascript
Bootstrap实现默认导航栏效果
Sep 21 Javascript
jQuery实现简易的输入框字数计数功能示例
Jan 16 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 Javascript
解决vue移动端适配问题
Dec 12 Javascript
JavaScript展开操作符(Spread operator)详解
Jul 20 Javascript
vue 中 get / delete 传递数组参数方法
Mar 23 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
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Cython 三分钟入门教程
2009/09/17 Python
python 实现插入排序算法
2012/06/05 Python
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python语法快速入门指南
2015/10/12 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
详解Python 解压缩文件
2019/04/09 Python
python retrying模块的使用方法详解
2019/09/25 Python
python保留小数位的三种实现方法
2020/01/07 Python
Python绘制组合图的示例
2020/09/18 Python
extern在函数声明中是什么意思
2014/01/19 面试题
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
银行实习鉴定
2013/12/13 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
2015年入党决心书
2015/02/05 职场文书
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript