JavaScript:覆盖 get 和 set 但保留本机功能

JavaScript: Override get and set but keep native functionality

用于测试:我需要覆盖 JavaScript 中对 HTMLElement 属性的本机访问,但保留本机功能。

下面的代码覆盖了 HTMLElementoffsetWidth 属性 但我不知道如何记录原生 getter.[=15 的结果=]

// How can I call this from within the getter?

var nativeOffsetWidth = HTMLElement.prototype.offsetWidth;

// Overrides the native access

Object.defineProperty(HTMLElement.prototype, 'offsetWidth', {
    
    get: () => {

        // This part does not work! I need to access the native property here.

        var value = nativeOffsetWidth.call(this);

        console.log(value);
        return value;
        
    }
    
});

一旦我得到正确的结果,我也想修改结果value

提前致谢!

您可以使用 Object.getOwnPropertyDescriptor

获取 属性 的原始值

这样使用:

const nativeOffsetWidth = Object.getOwnPropertyDescriptor(
    HTMLElement.prototype,
    'offsetWidth'
).get;
nativeOffsetWidth.call(document.body /* example html element */);