浅谈JS中的bind方法与函数柯里化


Posted in Javascript onAugust 10, 2016

绑定函数bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值。不同于call和apply只是单纯地设置this的值后传参,它还会将所有传入bind()方法中的实参(第一个参数之后的参数)与this一起绑定。

关于这个特性看《JS权威指南》原文的例子:

var sum = function(x,y) { return x + y }; 

var succ = sum.bind(null, 1); //让this指向null,其后的实参也会作为实参传入被绑定的函数sum

succ(2); // => 3: 可以看到1绑定到了sum函数中的x

其次, bind()方法所返回的函数的length(形参数量)等于原函数的形参数量减去传入bind()方法中的实参数量(第一个参数以后的所有参数),因为传入bind中的实参都会绑定到原函数的形参,举个例子:

function func(a,b,c,d){...} //func的length为4

var after = func.bind(null,1,2); //这里输入了两个实参(1,2)绑定到了func函数的a,b

console.log(after.length); //after的length为2

第三,当bind()所返回的函数用作构造函数的时候, 传入bind()的this将被忽略,实参会全部传入原函数,这样说很抽象,举个例子:

function original(x){
 this.a = 1;
 this.b = function(){return this.a + x}
}
var obj={
 a = 10
}
var newObj = new(original.bind(obj, 2)); //传入了一个实参2

console.log(newObj.a); //输出1, 说明返回的函数用作构造函数时obj(this的值)被忽略了
console.log(newObj.b()); //输出3 ,说明传入的实参2传入了原函数original

以上就是ES5中bind方法的特性, 这种技术也被称为函数柯里化。这种技术将多个参数的函数变成只带一个参数的函数。bind方法就是该技术在js中的实践。

关于这篇浅谈JS中的bind方法与函数柯里化就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 倒计时源代码.(时.分.秒) 详细注释版
May 09 Javascript
jQuery使用技巧简单汇总
Apr 18 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
Mar 23 Javascript
javascript实现3D变换的立体圆圈实例
Aug 06 Javascript
JS模拟的Map类实现方法
Jun 17 Javascript
js中获取键盘事件的简单实现方法
Oct 10 Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 Javascript
Vue生命周期示例详解
Apr 12 Javascript
实例详解带参数的 npm script
May 28 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 11 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 #Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 #Javascript
基于JavaScript实现树形下拉框
Aug 10 #Javascript
关于原生js中bind函数的简单实现
Aug 10 #Javascript
Mvc提交表单的四种方法全程详解
Aug 10 #Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 #Javascript
浅谈JS运算符&&和|| 及其优先级
Aug 10 #Javascript
You might like
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
AJAX的使用方法详解
2017/04/29 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
Less 安装及基本用法
2018/05/05 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
django正续或者倒序查库实例
2020/05/19 Python
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
最新英语专业学生求职信范文
2013/09/21 职场文书
财会自我鉴定范文
2013/12/27 职场文书
国际会议邀请函范文
2014/01/16 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
公司庆典欢迎词
2015/01/26 职场文书
2014年个人年终总结
2015/03/09 职场文书
创业计划书之养殖业
2019/10/11 职场文书