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 程序执行与顺序实现详解
May 13 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
浅谈javascript中return语句
Jul 15 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
Jul 20 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
javascript实现5秒倒计时并跳转功能
Jun 20 Javascript
vue实现页面滚动到底部刷新
Aug 16 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 jQuery
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实现利用MySQL保存session的方法
2014/08/23 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
ionic组件ion-tabs选项卡切换效果实例
2016/08/27 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
js实现微信聊天界面
2020/08/09 Javascript
Python中enumerate函数代码解析
2017/10/31 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
初中物理教学反思
2014/01/14 职场文书
企业文化口号
2014/06/12 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript