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);
 }
}

以上就是利用柯里化函数实现bind方法的相关代码,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
window.js 主要包含了页面的一些操作
Dec 23 Javascript
js判断字符长度及中英文数字等
Mar 19 Javascript
jQuery CSS()方法改变现有的CSS样式
Aug 20 Javascript
js的toUpperCase方法用法实例
Jan 27 Javascript
浅谈javascript原型链与继承
Jul 13 Javascript
JavaScript实现向右伸出的多级网页菜单效果
Aug 25 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
Feb 21 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 jQuery
使用Typescript和ES模块发布Node模块的方法
May 25 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
Bootstrap模态对话框的简单使用
Apr 29 #Javascript
jquery UI Datepicker时间控件的使用及问题解决
Apr 28 #Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 #Javascript
onclick和onblur冲突问题的快速解决方法
Apr 28 #Javascript
如何使用jquery修改css中带有!important的样式属性
Apr 28 #Javascript
JavaScript String 对象常用方法总结
Apr 28 #Javascript
JavaScript Math 对象常用方法总结
Apr 28 #Javascript
You might like
PHP中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
PHP 图片上传代码
2011/09/13 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
js如何验证密码强度
2020/03/18 Javascript
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
python rsa 加密解密
2017/03/20 Python
获取Django项目的全部url方法详解
2017/10/26 Python
Python线性回归实战分析
2018/02/01 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
python入门之基础语法学习笔记
2020/02/08 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
个人授权委托书
2014/04/03 职场文书
ktv好的活动方案
2014/08/17 职场文书
学习张林森心得体会
2014/09/10 职场文书
普通党员整改措施
2014/10/24 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏