你可以Object.fromEntries()用来创建你的 obj.
let domRec = document.getElementById('test').getBoundingClientRect();
// Convert to plain Object
let domObj = Object.fromEntries(Array.from(Object.keys(DOMRectReadOnly.prototype).filter(k => !isNaN(domRec[k])), k => [k, domRec[k]]));
// Convert back to DOMRectReadOnly
let domRec2 = DOMRectReadOnly.fromRect(domObj);
console.log('DOMRectReadOnly', domRec);
console.log('Plain Object', domObj);
console.log('DOMRectReadOnly', domRec2);
#test {
width: 200px;
height: 50px;
background-color: #f00;
}
<div id="test"></div>
但是,这也会将toJSONfn 复制到新的 obj 中。因此我建议过滤非数字值:.filter(k => !isNaN(domRec[k]).
轻的
如果您只对x, y, width,感兴趣height,您可以使用DOMRect而不是DOMRectReadOnly跳过该.filter()部分。
您可以从这 4 个值中计算bottom,的值,并且,只是,的别名。rightlefttopxy
let domRec = someElement.getBoundingClientRect();
let domObj = Object.fromEntries(Array.from(Object.keys(DOMRect.prototype), k => [k, domRec[k]]));