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高级程序设计(第3版)学习笔记11 内建js对象
Oct 11 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
jquery Mobile入门—多页面切换示例学习
Jan 08 Javascript
Jquery基础教程之DOM操作
Aug 19 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
微信小程序 Toast自定义实例详解
Jan 20 Javascript
详解Angular 4.x Injector
May 04 Javascript
基于Vuejs和Element的注册插件的编写方法
Jul 03 Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
vue3.0 上手体验
Sep 21 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php表单提交问题的解决方法
2011/04/12 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python 文件和输入输出小结
2013/10/09 Python
git进行版本控制心得详谈
2017/12/10 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
班会关于环保演讲稿
2013/12/29 职场文书
职工运动会邀请函
2014/01/19 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
签约仪式策划方案
2014/06/02 职场文书
质量安全标语
2014/06/07 职场文书
活动总结新闻稿
2014/08/30 职场文书
委托证明范本
2014/11/25 职场文书
小学美术教学反思
2016/02/17 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS