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 相关文章推荐
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 Javascript
Angularjs实现mvvm式的选项卡示例代码
Sep 08 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
Aug 19 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
JS监听事件的叠加和移除功能
Nov 19 Javascript
JavaScript实现数字前补“0”的五种方法示例
Jan 03 Javascript
vue实现新闻展示页的步骤详解
Apr 11 Javascript
jQuery实现可以计算进制转换的计算器
Oct 19 jQuery
解读Vue组件注册方式
May 15 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
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
require.js的用法详解
2015/10/20 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
vue中activated的用法
2021/01/03 Vue.js
Python中logging模块的用法实例
2014/09/29 Python
Python描述器descriptor详解
2015/02/03 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Pycharm github配置实现过程图解
2020/10/13 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
印度购物网站:TATA CLiQ
2017/11/23 全球购物
一名毕业生的自我鉴定
2013/12/04 职场文书
女大学生个人求职信
2013/12/09 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
公司接待方案
2014/03/08 职场文书
贺卡寄语大全
2014/04/11 职场文书
员工年度工作总结2015
2015/05/18 职场文书
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫