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弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
jquery 模板的应用示例
Nov 12 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
js改变透明度实现轮播图的算法
Aug 24 Javascript
基于JS实现的随机数字抽签实例
Dec 08 Javascript
微信小程序 textarea 组件详解及简单实例
Jan 10 Javascript
angular实现商品筛选功能
Feb 01 Javascript
JS中IP地址与整数相互转换的实现代码
Apr 10 Javascript
详解如何在vue-cli中使用vuex
Aug 07 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
Sep 12 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
Jul 30 Javascript
小程序实现长按保存图片的方法
Dec 31 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
中国第一家无线电行
2021/03/01 无线电
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
真正的ZIP文件操作类(php)
2007/07/21 PHP
Yii核心验证器api详解
2016/11/23 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
Vue中render函数的使用方法
2018/01/31 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
python pandas时序处理相关功能详解
2019/07/03 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
测绘工程个人的自我评价
2013/11/23 职场文书
怎样写演讲稿
2014/01/04 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
python的变量和简单数字类型详解
2021/09/15 Python