在浏览器中运行以下代码:

({ clone: structuredClone }).clone(1);

Will得到Uncaught TypeError: Illegal invocation分,在Chrome/Edge上测试.

然而,在NodeJS中运行代码是可以的,在NodeJS v20中测试.

解决方法:

({ clone: (v) => structuredClone(v) }).clone(1);

({ clone: function(v) { return structuredClone(v)} }).clone(1);

这是预期中的行为吗?

推荐答案

看起来是特定于平台的. 如果在Firefox中运行,则会出现更具描述性的错误:

Uncaught TypeError: 'structuredClone' called on an object that does not implement interface Window.

所以浏览器中的structuredClone需要在window上下文中执行.在浏览器中,你可以有多个窗口(iframe)作为一个全局上下文,而Node只有一个.所以structuredClone人应该知道该按哪个窗口行动.

structuredClone.call(window, 1);

// hmm, works with null too, seems takes the current window
structuredClone.call(null, 1);

structuredClone.call(1, 1);

要解决这个问题,你可以绑定函数:

({ clone: structuredClone.bind(null) }).clone(1);

Javascript相关问答推荐

React Native平面列表自动滚动

微软Edge编辑和重新发送未显示""

如何使用JavaScript将文本插入空div

如何从调整大小/zoom 的SVG路径定义新的d属性?""

Regex结果包含额外的match/group,只带一个返回

我可以使用空手道用户界面来获取网页的当前滚动位置吗?

使用领域Web SDK的Vite+Vue应用程序中的Web程序集(WASM)错误

Webpack在导入前混淆文件名

在css中放置所需 colored颜色 以填充图像的透明区域

元素字符串长度html

钛中的onClick事件需要在两次点击之间等待几秒钟

如何防止ionic 输入中的特殊字符.?

AJAX POST在控制器中返回空(ASP.NET MVC)

react 路由DOM有条件地呈现元素

将字体样式应用于material -UI条形图图例

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

MAT-TREE更多文本边框对齐问题

ReactJS Sweep Line:优化SciChartJS性能,重用wasmContext进行多图表渲染

如何动态呈现适合未知屏幕大小的最大数量的表行?苗条的

如何在预览中显示html+css与数据URL?