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 相关文章推荐
js 将json字符串转换为json对象的方法解析
Nov 13 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
May 04 Javascript
jquery实现具有嵌套功能的选项卡
Feb 12 Javascript
基于BootStarp的Dailog
Apr 28 Javascript
如何利用模板将HTML从JavaScript中抽离
Oct 08 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
Jun 06 Javascript
get  post jsonp三种数据交互形式实例详解
Aug 25 Javascript
javascript实现日历效果
Jun 17 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 Javascript
ES6基础之字符串和函数的拓展详解
Aug 22 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-MySQL教程归纳总结
2008/06/07 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
详解适配器在JavaScript中的体现
2018/09/28 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
Python切图九宫格的实现方法
2019/10/10 Python
Python中常用的os操作汇总
2020/11/05 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
实习生自我鉴定
2013/12/12 职场文书
商场中秋节广播稿
2014/01/17 职场文书
中学生运动会口号
2014/06/07 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
2014年财政局工作总结
2014/12/09 职场文书
Matlab求解数组中的最大值及它所在的具体位置
2021/04/16 Python
java多态注意项小结
2021/10/16 Java/Android
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS