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图片轮换效果的函数
Sep 28 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
javascript trim函数在IE下不能用的解决方法
Sep 12 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
May 28 Javascript
JavaScript实现点击按钮直接打印
Jan 06 Javascript
基于jQuery实现的无刷新表格分页实例
Feb 17 Javascript
Javascript 6里的4个新语法
Aug 25 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
vue源码解析之事件机制原理
Apr 21 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
vue v-for 使用问题整理小结
Aug 04 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 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产生不重复随机数的5个方法总结
2014/11/12 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
php设计模式之委托模式
2016/02/13 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
Python使用爬虫猜密码
2016/02/19 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
新郎婚宴答谢词
2014/01/19 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
预备党员群众意见
2015/06/01 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
如何使用python包中的sched事件调度器
2022/04/30 Python
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS