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的更多相关文章

  1. call, apply && bind, currying

    简要概括: apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组 ——function.apply(thisobj, args) 或者 function.apply(thiso ...

  2. Currying 及应用

    Currying,中文多翻译为柯里化,感觉这个音译还没有达到类似 Humor 之于幽默的传神地步,后面直接使用 Currying. 什么是 Currying Currying 是这么一种机制,它将一个 ...

  3. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  4. 前端开发者进阶之函数柯里化Currying

    穆乙:http://www.cnblogs.com/pigtail/p/3447660.html 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接 ...

  5. js里function的apply vs. bind vs. call

    js里除了直接调用obj.func()之外,还提供了另外3种调用方式:apply.bind.call,都在function的原型里.这3种方法的异同在stackoverflow的这个答案里说的最清楚, ...

  6. javascript-this,call,apply,bind简述3

    上节介绍了call()和apply()的用法,这节再讨论一下arguments参数和bind函数的用法以及函数柯里化就算是完结了. bind()函数 先看定义: bind()方法会创建一个函数的实例, ...

  7. std::function,std::bind

    std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数.bind()接受一个函数(或者 ...

  8. 《Web 前端面试指南》2、JavaScript 的 Bind 函数进阶

    使用 Bind() 设置方法中 this 对象 //<button>获取随机的人</button>​ //<input type="text"> ...

  9. angular.bind

    angular.bind :Returns a function which calls function fn bound to self (self becomes the this for fn ...

随机推荐

  1. 非post请求时整个url作为参数传递出现bug

    在非post请求使用整个url作为参数传递到后台时会出现url被截断的bug,这时通过encodeURIComponent进行url的编码可以解决.示例如下: <!--参数url-->Ur ...

  2. 小学四则运算APP 第二次冲刺 第四天

    团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第二次冲刺阶段时间:11.29~12.09 本次发布的是合并后的选择题功能界面的设置: ChoiceSet.java: package c ...

  3. HDU 1236 排名(Microsoft_zzt)

    http://acm.hdu.edu.cn/showproblem.php?pid=1236 Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完 ...

  4. Install alipay支付宝安全控件 on firefox in linux

    [root@rgqancy 下载]# ./aliedit.sh建议以非root账号安装支付宝安全控件请重启   firefox   使插件生效成功安装 支付宝安全控件请按任意键退出... what i ...

  5. 使用nodejs去做一个验证码

    let express = require('express'); let captchapng = require('captchapng'); let app = express(); app.g ...

  6. [转帖] 数据库用优化方案 https://segmentfault.com/a/1190000006158186

    Mysql大表优化方案     当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部 ...

  7. pandas 级联 concat append

    连接的一个有用的快捷方式是在Series和DataFrame实例的append方法.这些方法实际上早于concat()方法. 它们沿axis=0连接 #encoding:utf8 import pan ...

  8. linux服务器上安装python 3.6.3

    一.下载源码包 地址https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz 二.解压源码包 1.下载解压工具xz #yum -y ins ...

  9. python之attrgetter函数对对象排序

    # 使用attrgetter函数对对象排序 # attrgetter处理对象,itemgetter处理序列 from operator import attrgetter class user(): ...

  10. ThinkPHP 框架出现安全隐患 ,导致网站被持续攻击一周

    导读 据 ZDNET 报道,有超过 45000 个中国网站由于使用 ThinkPHP 框架受到了攻击. 这些攻击针对的是使用 ThinkPHP 构建的网站,ThinkPHP 是一个中国的 PHP 框架 ...