如何在findIndex函数中直接传入this.id而非赋值变量?
直接将
this.id传入findIndex的两种方法 嘿,这问题很常见,其实有两种简单的方法可以直接把this.id传入findIndex的回调里,不用额外声明变量,我给你拆解一下:
方法一:使用箭头函数(推荐)
箭头函数不会绑定自己的this,它会继承外层函数(也就是slideUp的回调函数)的this指向。这样你就能在findIndex的回调里直接访问到this.id了:
listing.slideUp(500, function() { var index = cars.findIndex(car => car[0].id === this.id); if (index > -1) { cars.splice(index, 1); } });
方法二:使用bind()绑定this
如果你需要兼容不支持箭头函数的旧环境,可以用bind()方法把外层的this绑定到findIndex的回调函数上,确保回调里的this和外层保持一致:
listing.slideUp(500, function() { var index = cars.findIndex(function(car) { return car[0].id === this.id; }.bind(this)); if (index > -1) { cars.splice(index, 1); } });
原理补充
为什么原来的代码需要额外声明listing_id?因为普通的function作为回调时,会创建自己的this上下文(通常指向全局对象或者undefined,取决于严格模式),没法直接访问外层slideUp回调里的this。而箭头函数或bind()能帮我们保留外层的this指向,所以就能直接用this.id啦。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

