javascript中bind另一个用法
来源:互联网 发布:数据挖掘实战 pdf 编辑:程序博客网 时间:2024/06/06 00:59
看师傅写的代码时,遇到的一个问题,毫无疑问的又是被鄙视了。
下面总结下bind的用法:
bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
1.绑定函数
我们知道bind的用法常用来跟call、apply比较,
bind()最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的this值。
将方法从对象中拿出来,然后调用,并且希望this指向原来的对象。如果不做特殊处理,一般会丢失原来的对象。使用bind()方法能够很漂亮的解决这个问题:
this.num = 9; var mymodule = { num: 81, getNum: function() { return this.num; }};module.getNum(); // 81var getNum = module.getNum;getNum(); // 9, 因为在这个例子中,"this"指向全局对象// 创建一个'this'绑定到module的函数var boundGetNum = getNum.bind(module);boundGetNum(); // 81
不同于call和apply只是单纯地设置this的值后传参,它还会将所有传入bind()方法中的实参(第一个参数之后的参数)与this一起绑定。
看下面代码:
var sum = function(x,y) { return x + y }; var succ = sum.bind(null, 1); //让this指向null,其后的实参也会作为实参传入被绑定的函数sum,相当于将1绑定到参数xsucc(2); // => 3: 可以看到1绑定到了sum函数中的x
以上用法为之前没注意到,也被忽略掉的用法。
另外还要注意的是: bind()方法所返回的函数的length(形参数量)等于原函数的形参数量减去传入bind()方法中的实参数量(第一个参数以后的所有参数),因为传入bind中的实参都会绑定到原函数的形参,举个例子:
function func(a,b,c,d){...} //func的length为4var after = func.bind(null,1,2); //这里输入了两个实参(1,2)绑定到了func函数的a,bconsole.log(after.length); //after的length为2
再来个例子:
let res=(a,b,c)=>{console.log(a,b,c)};let b = res.bind(null,1); //相当于参数1绑定到ab(2,3); //1 2 3 ,2和3分别绑定到b、c后执行b(2,3,4); //1 2 3 多余的参数4并没有传进去,被忽略掉了
最后顺便还要提醒下:当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)); //传入了一个实参2console.log(newObj.a); //输出1, 说明返回的函数用作构造函数时obj(this的值)被忽略了console.log(newObj.b()); //输出3 ,说明传入的实参2传入了原函数original
以上为本次总结,你看懂了吗?
阅读全文
0 0
- javascript中bind另一个用法
- Javascript中bind、call、apply函数用法
- Javascript中bind、call、apply函数用法
- Javascript中call,apply,bind三个函数的用法
- JavaScript中bind、call、apply函数用法详解
- JavaScript中bind、call、apply函数用法详解
- JavaScript中bind、call、apply函数用法详解
- JavaScript中bind、call、apply函数用法详解
- JavaScript 中 call 、 apply 以及 bind 的用法
- JavaScript中call、apply、bind函数的用法
- 浅谈javascript中call()、apply()、bind()的用法
- 浅谈javascript中call()、apply()、bind()的用法(转载)
- JavaScript中bind、call、apply函数用法详解
- Javascript中bind实现
- Javascript中apply、call、bind
- JavaScript中使用bind()方法
- Javascript中apply、call、bind
- Javascript中apply、call、bind
- 【算法期末作业】课本8.19 kite问题的NP完全问题证明
- 如何合适的清空 input[type=file] 的值
- 过滤器 Filter
- 《大话数据结构》学习笔记--chapter 4
- 0031_Next Permutation
- javascript中bind另一个用法
- bitmap海量数据
- 监听器 Listener
- synchronized锁不住?
- 【C语言】计算输入整数中每个数字出现的次数
- 51nod 1013 3的幂的和(逆元 or 矩阵快速幂)
- 机器学习基础(一)——人工神经网络与简单的感知器
- LeetCode-- Longest Substring Without Repeating Characters
- WordPress代码编辑页面支持的HTML标签