DOMRect属性不可枚举,因为它们不从与Object相同的原型继承。为什么?

时间:2018-04-24 01:21:28

标签: javascript

我知道DOMRect属性是从DOMRectPrototype继承的,因此Object.assign和Object.keys无法访问它们,因此DOMRect属性不可枚举。我的问题是,这样做的原因是什么?

我有一个函数可以比较两个对象是否相等,我想通过它运行2个document.body.getBoundingClientRect()个实例。如何在原型上定义可枚举的get属性?我试过这个:

const rect = document.body.getBoundingClientRect();
Object.defineProperty(rect, "b", { enumerable: true, get: function () { return rect }});
Object.keys(rect)

但没有运气,它将DOMRect属性作为单个对象返回

1 个答案:

答案 0 :(得分:0)

虽然我不鼓励这样做,但回答你的问题:

function copyDOMRect(input) {
    return {
        x: input.x,
        y: input.y,
        left: input.left,
        right: input.right,
        top: input.top,
        bottom: input.bottom,
        height: input.height,
        width: input.width,
    };
}

copyDOMRect(new DOMRect(0,0,100,100)); // now you can use Object.keys, etc.

你也可以修改DOMRect的原型(也不鼓励),使这更简单。