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 DOM编程实例(智播客学习)
Nov 23 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
May 10 Javascript
jQuery阻止冒泡和HTML默认操作
Nov 17 Javascript
Javascript实现字数统计
Jul 03 Javascript
javascript淘宝主图放大镜功能
Oct 20 Javascript
js调用屏幕宽度的简单方法
Nov 14 Javascript
Angularjs单选框相关的示例代码
Aug 17 Javascript
详解项目升级到vue-cli3的正确姿势
Jan 28 Javascript
node中IO以及定时器优先级详解
May 10 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
javascript浅层克隆、深度克隆对比及实例解析
Feb 09 Javascript
微信小程序转化为uni-app项目的方法示例
May 22 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 文件上传实例代码
2012/04/19 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
从零学JSON之JSON数据结构
2014/05/19 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
python实现udp聊天窗口
2020/03/31 Python
Python无损压缩图片的示例代码
2020/08/06 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
小区推广策划方案
2014/06/06 职场文书
中职招生先进个人材料
2014/08/31 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers