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 相关文章推荐
document对象execCommand的command参数介绍
Aug 01 Javascript
javascript学习笔记(五)正则表达式
Apr 08 Javascript
一个JQuery写的点击上下滚动的小例子
Aug 27 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
React学习笔记之高阶组件应用
Jun 02 Javascript
通过JS运行机制的角度说说作用域
Mar 12 Javascript
JS一次前端面试经历记录
Mar 19 Javascript
JS访问对象两种方式区别解析
Aug 29 Javascript
vue-cli4使用全局less文件中的变量配置操作
Oct 21 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
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
php强制下载类型的实现代码
2011/04/21 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
Python入门学习指南分享
2018/04/11 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
python中time、datetime模块的使用
2020/12/14 Python
python自动化办公操作PPT的实现
2021/02/05 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
超市营业员求职简历的自我评价
2013/10/17 职场文书
大四学年自我鉴定
2013/11/13 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
百家讲坛观后感
2015/06/12 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python