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 相关文章推荐
学习ExtJS Panel常用方法
Oct 07 Javascript
js 事件处理函数间的Event物件是否全等
Apr 08 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
基于vue2实现上拉加载功能
Nov 28 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
Aug 24 Javascript
js for终止循环 跳出多层循环
Oct 04 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
Sep 24 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 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 str_replace的替换漏洞
2008/03/15 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
Python实现的凯撒密码算法示例
2018/04/12 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
社区庆八一活动方案
2014/02/02 职场文书
法律进机关实施方案
2014/03/12 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
单位介绍信格式
2015/01/31 职场文书
周末问候语大全
2015/11/10 职场文书
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS