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);
  }
}

以上这篇javascript中利用柯里化函数实现bind方法【推荐】就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery.validate提示错误信息位置方法
Jan 22 Javascript
基于JavaScript实现随机颜色输入框
Dec 10 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
May 07 Javascript
vue组件间通信六种方式(总结篇)
May 15 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
Aug 16 Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 Javascript
js实现选项卡效果
Mar 07 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
Javascript实现简易天数计算器
May 18 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
基于element-ui封装表单金额输入框的方法示例
Jan 06 Javascript
关于uniApp editor微信滑动问题
Jan 15 Javascript
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
Apr 29 #Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
Apr 29 #Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
Apr 29 #Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 #Javascript
弹出遮罩层后禁止滚动效果【实现代码】
Apr 29 #Javascript
一系列Bootstrap导航条使用方法分享
Apr 29 #Javascript
Bootstrap实现下拉菜单效果
Apr 29 #Javascript
You might like
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
PHP实现小偷程序实例
2016/10/31 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
Python中实现结构相似的函数调用方法
2015/03/10 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
测绘工程个人的自我评价
2013/11/23 职场文书
总结表彰大会主持词
2014/03/26 职场文书
家长对孩子的评语
2014/04/18 职场文书
实习生评语
2014/04/26 职场文书
销售求职信范文
2014/05/26 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
一道JS算法面试题——冒泡、选择排序
2021/04/21 Javascript
golang import自定义包方式
2021/04/29 Golang
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL