bind&currying
1. bind
- 基本用法
bind()是ECMAScript5中新增的方法,这个方法主要作用是将函数绑定至某个对象。当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新函数,这个新函数与原函数f()的区别仅仅是this参数指向了一个特定对象o。
实例如下:
function f(y){
return this.x + y;
}
var obj = {x: 1};
var newFun = f.bind(obj);
newFun(2);//=>3
模拟基本用法:
if(!Function.prototype.bind){
Function.prototype.bind = function(/*o*/){
var obj = arguments[0];
var selfFun = this;
return function(/*args*/){
return selfFun.apply(obj, arguments);
};
};
}
function f(y){return this.x + y}
var obj = {x: 1};
var newFun = f.bind(obj);
console.log(newFun(2));//=>3
- currying
什么是柯里化?如果你固定一个函数的某些参数,将得到接受余下参数的一个新函数。ECMAScript5中得bind()方法不仅仅能够将某个函数中的this绑定至特定对象,还可以将函数的形参绑定到特定值。bing()的这种应用方式成为柯里化(curring)。
例子如下:
var sum = function(x, y){return x + y + this.z};
var obj = {z: 1};
var newFun = sum.bind(obj, 1);
console.log(newFun(1));//=>3
模拟currying用法:
if(!Function.prototype.bind){
Function.prototype.bind = function(/*o, args*/){
//保存要绑定的函数
var selfFun = this;
//保存绑定的实参
var obj = arguments[0];//将第一个参数绑定到this
var boundArgs = arguments;//将后面的参数绑定到函数的前面几个参数
//bind方法返回一个函数(闭包)
//这个闭包要访问外部函数中的selfFun, boundArgs, obj.
return function(/*argsLeft*/){
var args = [];//创建实参数组
var i;
for(i = 1; i < boundArgs.length; i++){//push绑定的实参
args.push(boundArgs[i]);
}
for(i = 0; i < arguments.length; i++){//push剩余实参
args.push(arguments[i]);
}
//闭包内要访问外部函数内定义的变量
return selfFun.apply(obj, args);
};
}
}
function sum(x, y){return x + y + this.z};
var obj = {z: 1};
var newFun = sum.bind(obj, 1);
console.log(newFun(1));//=>3
bind&currying的更多相关文章
- call, apply && bind, currying
简要概括: apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组 ——function.apply(thisobj, args) 或者 function.apply(thiso ...
- Currying 及应用
Currying,中文多翻译为柯里化,感觉这个音译还没有达到类似 Humor 之于幽默的传神地步,后面直接使用 Currying. 什么是 Currying Currying 是这么一种机制,它将一个 ...
- 【转载】JS中bind方法与函数柯里化
原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...
- 前端开发者进阶之函数柯里化Currying
穆乙:http://www.cnblogs.com/pigtail/p/3447660.html 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接 ...
- js里function的apply vs. bind vs. call
js里除了直接调用obj.func()之外,还提供了另外3种调用方式:apply.bind.call,都在function的原型里.这3种方法的异同在stackoverflow的这个答案里说的最清楚, ...
- javascript-this,call,apply,bind简述3
上节介绍了call()和apply()的用法,这节再讨论一下arguments参数和bind函数的用法以及函数柯里化就算是完结了. bind()函数 先看定义: bind()方法会创建一个函数的实例, ...
- std::function,std::bind
std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数.bind()接受一个函数(或者 ...
- 《Web 前端面试指南》2、JavaScript 的 Bind 函数进阶
使用 Bind() 设置方法中 this 对象 //<button>获取随机的人</button> //<input type="text"> ...
- angular.bind
angular.bind :Returns a function which calls function fn bound to self (self becomes the this for fn ...
随机推荐
- 必应词典案例分析——个人博客作业week3
案例分析 ——必应词典客户端 软件缺陷常常又被叫做Bug,即为计算机软件或程序中存在的某种破坏正常运行能力的问题.错误,或者隐藏的功能缺陷. 缺陷的存在会导致软件产品在某种程度上不能满足用户的需要.I ...
- 《Linux内核设计与实现》第十八章学习笔记
第十八章 调试 [学习时间:1小时 总结博客时间:1小时15分] [学习内容:出现bug的原因.内核调试器gdb.使用Git进行二分查找] 内核级开发的调试工作远比用户级开发艰难,它带来的风险比用户级 ...
- numpy行转列
>>> a = np.array([1, 2, 3]) >>> a = a.reshape(-1, 1) #-1表示任意行数,1表示1列 >>> ...
- beta版验收互评
排名 团队名称 项目名称 优点 缺点,bug 报告 1 别看了你没救了队 校园帮帮帮(已发布) 实现普通用户的登陆,修改个人信息,发布信息,下订单的功能:管理员登陆,修改个人信息,发布信息,下订单,增 ...
- HDU 2029 Palindromes _easy version
http://acm.hdu.edu.cn/showproblem.php?pid=2029 Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“ ...
- Linux 改变文件属性与权限
常用的修改文件组或文件的命令有三个:chgrp.chown.chmod. 1 chgrp 改变文件所属的用户组 改变一个文件的用户组直接以chgrp来改变即可,这个命令时change group 的简 ...
- [转帖]一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
一文看懂web服务器.应用服务器.web容器.反向代理服务器区别与联系 https://www.cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别 ...
- add (db.collection.add)添加数据
db.collection('cheshi').add({ data: { cheshi:4, } }).then((res) => { console.log(res) })
- Linux基础学习(9)--文件系统管理
第九章——文件系统管理 一.回顾分区和文件系统 1.分区类型: 2.分区表示方法: 3.文件系统: 二.文件系统常用命令 1.df命令.du命令.fsck命令和dump2fs命令: (1)文件系统查看 ...
- linux ssh和scp消除每次问yes/no
ssh 10.11.3.61The authenticity of host '10.11.3.61 (10.11.3.61)' can't be established.RSA key finger ...