如何可靠地确定浏览器是否支持 DataTransfer() 构造函数?

How can I reliably determine if a browser supports the DataTransfer() constructor?

我有一个文件上传器,它使用 new DataTransfer() 为上传的图像生成和显示缩略图。对于 Safari 用户,此构造函数为 not supported。棘手的部分是 DataTransfer 作为一个特性 支持的——特别是构造函数不受支持。

如何检测此功能是否存在,以便我可以为 Safari 用户提供标准 file 输入?澄清一下,我不是在寻求后备方面的帮助 - 只是功能检测本身。

我尝试了以下方法但无济于事:

const isConstructor = (func) => (func && typeof func === "function" && func.prototype && func.prototype.constructor) === func;

isConstructor(DataTransfer);  //true in Safari

我能够解决这个问题,但以一种我不太满意的有点老套的方式。我仍然会接受我能得到的更好的答案。

let dataTransferConstructorSupported = false;
try { new DataTransfer(), dataTransferConstructorSupported = true } catch {}

console.log(dataTransferConstructorSupported);