如何以函数式方式调用数组中对象的无参方法(无需for循环)
解决数组对象方法调用的简洁写法
嘿,你其实离答案只差一步!最简洁且能确保this正确绑定的方式,其实是在forEach里用箭头函数直接调用每个对象的方法——完全不需要绕弯子用call、bind或者字符串方法名。
直接看代码:
list.forEach(item => item.someMethod());
为什么这个写法有效?
这里的item就是数组里的每一个对象实例,直接调用item.someMethod()时,方法内部的this会自动指向item本身,完美符合你的需求:
- 没有用传统的
for循环 - 代码简洁到一眼就能看懂
- 完全不用担心
this绑定错误的问题
为什么你之前的尝试可能出问题?
如果你之前试过直接传方法引用(比如list.forEach(obj.someMethod)),那确实会丢失this——因为forEach调用回调时,默认不会把当前对象绑定为方法的this。但用箭头函数包裹之后,我们直接通过item变量访问当前对象,调用它的方法,就彻底避开了这个绑定陷阱。
还有一种稍显“技巧性”的写法,但可读性不如箭头函数:
// 注意:如果数组为空,list[0]会是undefined,调用someMethod会报错 list.forEach(Function.prototype.call, list[0].someMethod);
这种方式利用了forEach的第二个参数作为回调的this,但显然不如箭头函数直观,而且有数组为空的风险,所以更推荐第一种写法。
内容的提问来源于stack exchange,提问作者Nicholas Shanks
相关产品推荐
相关产品推荐

