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 相关文章推荐
用函数式编程技术编写优美的 JavaScript_ibm
May 16 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
Dec 25 Javascript
详解javascript实现自定义事件
Jan 19 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
Oct 26 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
Apr 03 Javascript
webpack中的热刷新与热加载的区别
Apr 09 Javascript
js实现二级菜单点击显示当前内容效果
Apr 28 Javascript
js Array.slice的8种不同用法示例
Jul 10 Javascript
详解微信小程序动画Animation执行过程
Sep 23 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中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
最新大学生自我评价
2013/09/24 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
诉讼授权委托书
2014/10/15 职场文书
国庆节主题班会
2015/08/15 职场文书
学生安全责任协议书
2016/03/22 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书