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 相关文章推荐
扩展jquery实现客户端表格的分页、排序功能代码
Mar 16 Javascript
jQuery+正则+文本框只能输入数字的实现方法
Oct 07 Javascript
浅谈Angular中ngModel的$render
Oct 24 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
JS实现div模块的截图并下载功能
Oct 17 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
Mar 09 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
Oct 12 Javascript
vue cli使用融云实现聊天功能的实例代码
Apr 19 Javascript
WEB前端性能优化的7大手段详解
Feb 04 Javascript
javascript canvas API内容整理
Feb 16 Javascript
JS绘图Flot如何实现可选显示曲线图功能
Oct 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中的cookie不用刷新就生效的方法
2012/02/04 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
活动倡议书范文
2014/05/13 职场文书
管理建议书范文
2014/05/13 职场文书
四风对照检查材料范文
2014/09/27 职场文书
2014年仓库工作总结
2014/11/20 职场文书
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python