JS中的bind方法与函数柯里化
2016-02-15 22:37
489 查看
绑定函数
关于这个特性看《JS权威指南》原文的例子:
其次, bind()方法所返回的函数的length(形参数量)等于原函数的形参数量减去传入bind()方法中的实参数量(第一个参数以后的所有参数),因为传入bind中的实参都会绑定到原函数的形参,举个例子:
第三,当bind()所返回的函数用作构造函数的时候, 传入bind()的this将被忽略,实参会全部传入原函数,这样说很抽象,举个例子:
以上就是ES5中bind方法的特性, 这种技术也被称为函数柯里化。这种技术将多个参数的函数变成只带一个参数的函数。bind方法就是该技术在js中的实践。
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中的实践。
相关文章推荐
- JVM统计监测工具
- JavaScript 总结几个提高性能知识点
- javascript面向对象编程方式
- javascript正则表达式验证IP,URL
- HTML静态网页--JavaScript-Window.document对象
- HTML静态网页--JavaScript-DOW操作
- HTML静态网页--JavaScript-语法
- HTML静态网页--JavaScript-简介
- JavaScript 笔记 7 - 字符串对象
- JavaScript的学习
- javascript-页面跳转-(咋个办呢-zgbn)
- JavaScript实现动态加载其他的js文件-(咋个办呢 zgbn)
- 【JSTL】--附加:c:import,c:url;c:param,c:redirect--drp217
- WebSphere MQ call failed ..reason '2397' ('MQRC_JSSE_ERROR') 问题解决
- 常用的JavaScript模式
- js 获取url参数
- JSP 中的 Error Page
- js 应用之match()
- 《JavaScript高级程序设计》读书笔记(一)
- jsp小技巧--自定义输出src