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 相关文章推荐
原生javascript获取元素样式属性值的方法
Dec 25 Javascript
jquery实现的一个导航滚动效果具体代码
May 27 Javascript
javascript中typeof操作符和constucor属性检测
Feb 26 Javascript
JavaScript分页功能的实现方法
Apr 25 Javascript
利用bootstrapValidator验证UEditor
Sep 14 Javascript
前端js弹出框组件使用方法
Aug 24 Javascript
AngularJS开发教程之控制器之间的通信方法分析
Dec 25 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
vue中使用sessionStorage记住密码功能
Jul 24 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
Feb 12 Javascript
JS实现网页时钟特效
Mar 25 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
用cookies来跟踪识别用户
2006/10/09 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
银行学习十八大感想
2014/01/11 职场文书
考试没考好检讨书
2014/01/31 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
大学社团活动总结
2014/04/26 职场文书
团干部培训方案
2014/06/03 职场文书
公司周年庆活动方案
2014/08/25 职场文书
优秀党员事迹材料
2014/12/18 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
世界文化遗产导游词
2019/08/07 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
JavaScript原型链详解
2021/11/07 Javascript