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判断是否已经弹出页面
Oct 20 Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 Javascript
jQuery简单实现遍历数组的方法
Apr 14 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
JS特效实现图片自动播放并可控的效果
Jul 31 Javascript
jQuery实现图片局部放大镜效果
Mar 17 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
vue上传图片组件编写代码
Jul 26 Javascript
vue给组件传递不同的值方法
Sep 29 Javascript
解决Layui中templet中a的onclick参数传递的问题
Sep 20 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 Javascript
vue项目中使用vue-layer弹框插件的方法
Mar 11 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
11月升旗仪式讲话稿
2014/02/15 职场文书
倡议书的写法
2014/08/30 职场文书
大学毕业生个人总结
2015/02/28 职场文书
倡议书范文大全
2015/04/28 职场文书
会议主持词开场白
2015/05/28 职场文书
学习经验交流会策划书
2015/11/02 职场文书
网络研修随笔感言
2015/11/18 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
JavaScript 反射学习技巧
2021/10/16 Javascript
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript