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 相关文章推荐
js宝典学习笔记(上)
Jan 10 Javascript
理解Javascript_09_Function与Object
Oct 16 Javascript
css配合jquery美化 select
Nov 29 Javascript
js图片自动轮播代码分享(js图片轮播)
May 06 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
Apr 06 Javascript
基于javascript实现单选及多选的向右和向左移动实例
Jul 25 Javascript
js实现的页面矩阵图形变换特效
Jan 26 Javascript
AngularJS监听ng-repeat渲染完成的方法
Mar 20 Javascript
layui表格数据重载
Jul 27 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 11 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
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
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
angular多语言配置详解
2019/05/16 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python如何判断数独是否合法
2016/09/08 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
python 8种必备的gui库
2020/08/27 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
师范大学音乐表演专业求职信
2013/10/23 职场文书
电大毕业生自我鉴定
2013/11/10 职场文书
财务管理专业自荐信范文
2013/12/24 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
询价采购方案
2014/06/09 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书