如何将类构造函数作为参数传递?以Date构造函数为例
问题解答
首先说为什么你写的const y = x.map(Date.constructor)无法生效:Date.constructor指向的是Function构造函数,相当于你在循环里调用new Function(v),这和创建Date对象完全无关,自然得不到想要的结果。
另外补充一点:就算你直接写x.map(Date)也不行,因为这时候是直接调用Date(v)(没有用new关键字),返回的是字符串类型的时间,而不是Date实例,不符合你的需求。
可行的解决方法
方法1:保留箭头函数(推荐)
虽然你觉得有点冗余,但这种写法在JS里是最清晰、可读性最高的,几乎不会有歧义:
const y = x.map(v => new Date(v));
方法2:封装通用构造调用函数
如果需要多次复用“把构造函数转为可直接调用的回调”的逻辑,可以封装一个工具函数:
// 封装一个工具函数,接收构造函数,返回能创建实例的函数 const createInstance = (Cls) => (...args) => new Cls(...args); // 调用时直接传入Date构造函数 const y = x.map(createInstance(Date));
后续如果要转换其他类的实例数组,也可以复用这个createInstance函数。
方法3:使用Reflect.construct
通过Reflect.construct来调用构造函数,不过写法和箭头函数差不多,没有明显简洁性优势:
const y = x.map(v => Reflect.construct(Date, [v]));
内容的提问来源于stack exchange,提问作者Jeffrey Chen
相关产品推荐
相关产品推荐

