扩展运算符无法克隆 getBoundingClientRect() 获取的值

问题描述

js 复制代码
export function capture(key: string | number, el: HTMLElement | null): void {
  if (!el) return

  const rect = el.getBoundingClientRect()
  console.log('获取到的值', rect, '展开时', { ...rect })

  // ....
}

打印结果如下:

底层原理

getBoundingClientRect() 返回的是一个 DOMRect 对象 。在 JS 中,DOMRect 的属性(left, top 等)是定义在 原型链(Prototype) 上的 getter,而不是对象自身的 enumerable 属性。因此,使用 {...rect} 扩展运算符无法克隆出这些值。

解决方案

手动解构

js 复制代码
 export function capture(key: string | number, el: HTMLElement | null): void {
  if (!el) return

  const rect = el.getBoundingClientRect()
  const computedStyle = window.getComputedStyle(el)

  const info = {
    left: rect.left,
    top: rect.top,
    width: rect.width,
    height: rect.height,
    x: rect.x,
    y: rect.y,
    fontSize: parseFloat(computedStyle.fontSize) || undefined
  }
  
 console.log('info', info)
}

此时打印结果:

相关推荐
油丶酸萝卜别吃19 小时前
JavaScript 深度合并函数 deepMerge 实现指南(附完整测试用例)
开发语言·javascript·测试用例
问心无愧051319 小时前
ctf show web 入门152
前端·笔记
kyriewen19 小时前
Copilot下个月按Token收钱,我算了一笔账:重度用户一年要多花3000块
前端·javascript·openai
还有多久拿退休金19 小时前
dnd-kit 碰撞检测算法:你的订单为什么自己"跑"到了 1 号?
前端
qq_3168377519 小时前
npm run tauri build Downloading下载超时
前端·npm·node.js
w_t_y_y19 小时前
VUE3(二)VUE2和VUE3区别
前端·javascript·vue.js
T-shmily19 小时前
使用svg图标
前端·css
阿明在折腾20 小时前
在浏览器里实现 PDF 合并与拆分:pdf-lib 实战指南
前端·javascript
米高梅狮子20 小时前
03.OpenStack使用
linux·前端·云原生·容器·架构·kubernetes·openstack
时光不负努力20 小时前
手写三大核心:Promise、Event Bus、深拷贝
前端