javascript中利用柯里化函数实现bind方法【推荐】
作者:jingxian 发布时间:2024-05-02 17:29:26
标签:javascript,柯里化,bind方法
• 柯理化函数思想:一个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);
}
}
0
投稿
猜你喜欢
- 说明1、如果数据集是高维度的,选择谱聚类是子空间的一种。2、如果数据量是中小型的,比如在100W条以内,K均值会是更好的选择;如果数据量超过
- 关于vue的过渡效果,vue官方给的概述是这样的。Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具:1
- 使用python基于cartopy库绘制台风路径使用python 绘制西太平洋进入我国的台风路径,文件为.dat格式,内容如下所示:代码如下
- 在使用Python的过程中,一定是离不开数据结构的, 也就是List-列表,Tuples-元组,Dictionaries-字典。那实际应用中
- Todo清单需要实现的功能有添加任务、删除任务、编辑任务,操作要关联数据库。任务需要绑定用户,部门。用户需要绑定部门。{#自己编写一个基类模
- XML 是严格又自由的标记语言。我们都习惯于它的自由特性,自己想怎么定义都行,设计上非常自由,从不会因为它的标记特性约束到设计灵感的发挥。对
- 用 Python 做一件很平常的事情: 打开文件, 逐行读入, 最后关掉文件; 进一步的需求是, 这也许是程序中一个可选的功能, 如果有任何
- 一、js中导致undefined的几种情况:1、变量声明过但没有赋值;2、获取对象中不存在的属性时;3、函数需要实参,但是调用时没有传参,形
- 交待:使用的软硬件环境为Win XP SP2、SQL Server 2000 SP2个人版、普通双核台式机、1000M局域网,A机为已使用的
- 1. Graphql是什么?GraphQL是Facebook 在2012年开发的,2015年开源,2016年下半年Facebook宣布可以在
- 下面写一个给大家做参考啊 create procedure sp_find(pfind varchar(500) BEGIN DECLAR
- 很多人错误地认为ASP是简单、低效的代名词,认为ASP是低能的,不足挂齿的,也很简单,一学就会,一琢磨就精通。有人讲ASP不安全,写ASP的
- 先看实际效果,现在时间2018.4.26使用python脚本按照年月日生成多级目录,创建的目录可以将系统生成的日志文件放入其中,方便查阅,代
- PHP 向它运行的任何脚本提供了大量的预定义常量。魔术常量准确来说并不能算是常量,常量我们在之前的文章中我们介绍到,常量被定义之后是不能被改
- 本文实例讲述了JS实现根据数组对象的某一属性排序操作。分享给大家供大家参考,具体如下:根据数组中对象的某一属性排序var newArray
- Python的装饰器可以实现在代码运行期间修改函数的上下文, 即可以定义函数在执行之前进行何种操作和函数执行后进行何种操作, 而函数本身并没
- 1、二维数组声明方式是下面这样的:var images=new Array(); //先声明一维 for(var i=0;i<10;i
- Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift
- subplot函数介绍matplotlib下, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘
- MySQL根据不同条件联查不同表的数据项目开发中遇到类似的需求。Mybatis 中的< if >标签只能判断where部分,不能