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 相关文章推荐
Tab页界面,用jQuery及Ajax技术实现
Sep 21 Javascript
JavaScript DOM学习第六章 表单实例
Feb 19 Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
JavaScript中双叹号!!作用示例介绍
Sep 21 Javascript
javascript函数声明和函数表达式区别分析
Dec 02 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
Mar 19 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
Apr 10 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
Vue实例的对象参数options的几个常用选项详解
Nov 08 Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 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中的时间处理
2006/10/09 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python Collatz序列实现过程解析
2019/10/12 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
办公室文秘自我评价
2013/09/21 职场文书
自我评价怎么写正确呢?
2013/12/02 职场文书
上班离岗检讨书
2014/01/27 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
儿童生日会策划方案
2014/05/15 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
工作简历的自我评价
2019/05/16 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server