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全部源代码
May 04 Javascript
JavaScript新窗口与子窗口传值详解
Feb 11 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
jQuery选择器之基本选择器与层次选择器
Mar 03 Javascript
jQuery实现动画效果circle实例
Aug 06 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
Jul 17 jQuery
vue绑定class与行间样式style详解
Aug 16 Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
字节飞书面试promise.all实现示例
Jun 16 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 str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python 可爱的大小写
2008/09/06 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
你常见到的runtime exception
2016/09/05 面试题
应届生服务员求职信
2013/10/31 职场文书
搞笑创意广告语
2014/03/17 职场文书
百年校庆节目主持词
2014/03/27 职场文书
生活部的活动方案
2014/08/19 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
Python中Selenium对Cookie的操作方法
2021/07/09 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫