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 相关文章推荐
自己开发Dojo的建议框架
Sep 24 Javascript
一段实现页面上的图片延时加载的js代码
Feb 11 Javascript
js中opener与parent的区别详细解析
Jan 14 Javascript
使用jQuery监听DOM元素大小变化
Feb 24 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
May 21 Javascript
AngularJS实现星星等级评分功能
Sep 24 Javascript
整理一下常见的IE错误
Nov 18 Javascript
JavaScript实现Fly Bird小游戏
Dec 15 Javascript
利用node.js如何搭建一个简易的即时响应服务器
May 28 Javascript
JS中Safari浏览器中的Date
Jul 17 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
详解TypeScript中的类型保护
Apr 29 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
Terran热键控制
2020/03/14 星际争霸
PHP 数字左侧自动补0
2008/03/31 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
用javascript操作xml
2006/11/04 Javascript
可实现多表单提交的javascript函数
2007/08/01 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
JSONP之我见
2015/03/24 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
JavaScript实现动态生成表格
2020/08/02 Javascript
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
Python 的 Socket 编程
2015/03/24 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
django实现类似触发器的功能
2019/11/15 Python
Python之多进程与多线程的使用
2021/02/23 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
《回乡偶书》教学反思
2014/04/12 职场文书
临床专业自荐信
2014/06/22 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
语文复习计划
2015/01/19 职场文书
工作失职检讨书
2015/01/26 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
中学语文教学反思
2016/02/16 职场文书