bind(this)和es6箭头函数
来源:互联网 发布:网络助手在哪里打开 编辑:程序博客网 时间:2024/05/29 08:36
如果将一个对象的方法作为回调函数传入,你需要定义一个确定的this,否则它将作为一个函数来执行,即this的指向会出现问题.例如:
我们想遍历一个数组,并把数组的每一项放入一个新数组,而这个新数组和push方法是一个对象obj的属性及方法,我们感觉正常写法如下
var obj={ ar:[], push: function (c) { console.log(this);-->打印window this.ar.push(c); }} var arr=[1,2,3]; arr.forEach(obj.push) console.log(obj.ar);
但是却报错:TypeError: Array.prototype.push called on null or undefined 意思是在该对象上没有push方法,果然打印这个方法中的this是指向window的而不是obj,这自然无法调用obj的push方法,于是我们想到要修改this的指向,让它指向obj就好了
方法一:为forEach方法的第二个参数设置this指向的对象,这个参数一般我们用不到,因此被忽略了,不清楚的可以再去看一下forEach的基本使用方法,这样就正常了,我们打印一下push方法中的this指向也是正确指向了obj
var obj={ ar:[], push: function (c) { console.log(this);-->obj this.ar.push(c) }} var arr=[1,2,3]; arr.forEach(obj.push,obj) console.log(obj.ar);--> [1, 2, 3]
方法二:我们还可以用bind来为this重新设置指向,让其指向obj
arr.forEach(obj.push.bind(obj));
方法三:在回调函数里面调用obj的push方法
arr.forEach(function (val) { obj.push(val) });
方法四:使用箭头函数,其实就是方法三的es6写法!这样可以保证其this就是一开始的指向
arr.forEach((val)=>obj.push(val));
0 0
- bind(this)和es6箭头函数
- ES6:箭头函数以及this
- ES6 箭头函数中的 this
- es6箭头函数this指向
- es6箭头函数中this的问题
- ES6箭头函数、Class、this、继承。
- 深入理解ES6箭头函数中的this
- ES6 箭头函数中的 this?(临时性保存)
- ES6箭头函数中的this绑定问题
- 深入理解ES6箭头函数的this
- ES6箭头函数this指向问题
- es6-箭头函数中的this使用
- ES6 箭头函数this指向问题
- bind(this)绑定this指向的对象、箭头函数和闭包
- JS的this总结(下)-ES6箭头函数this指向
- ES6学习记录之class, extends, super和箭头函数与this
- ES6 中的 bind(this)
- ES6声明变量和箭头函数
- 为Kubernetes集群提供反向代理,从集群外部通过标准http端口访问kube-Dashboard等内部应用
- 图像算法研究---超高速指数模糊算法的实现和优化
- Android 8.0
- 【图解】js中的各种尺寸(高度、宽度)
- memcached在大负载高并发网站上的应用(2)
- bind(this)和es6箭头函数
- 链队列
- npm常用命令
- Docker删除所有启动的容器
- python标准库手记【1】
- redis的数据类型-String
- POJ 2492 A Bug's Life
- MS17-010特别版补丁NSA漏洞
- DHTML技术演示--- 简答复选框,邮箱复选框学习