structuredClone在Chrome/Edge触发Illegal invocation,NodeJS正常,该行为是否符合预期?
这种差异行为是否属于预期情况?
是的,这属于预期行为,根源在于浏览器和Node.js环境对structuredClone的实现机制不同:
- 在Chrome/Edge等浏览器中,
structuredClone是绑定到全局对象(如window)的方法,它的执行依赖正确的this指向。当你直接将它赋值给自定义对象的clone属性并调用时,函数的this会指向这个自定义对象,不符合浏览器端structuredClone的预期上下文,因此抛出Uncaught TypeError: Illegal invocation错误。 - 在Node.js v20环境中,
structuredClone被设计为不依赖this的普通全局函数,无论调用上下文是什么,都能正常执行,所以不会报错。
问题复现代码
({ clone: structuredClone }).clone(1);
解决方案代码
方案一:使用箭头函数绑定正确的调用上下文
({ clone: (v) => structuredClone(v) }).clone(1);
方案二:使用普通函数显式调用structuredClone
({ clone: function(v) { return structuredClone(v)} }).clone(1);
内容的提问来源于stack exchange,提问作者DiscreteTom
相关产品推荐
相关产品推荐

