Estoy tratando de desarrollar una extensión en Chrome que me permita interceptar el acceso al objeto de la window . Digamos que quiero devolver double window.innerHeight , intenté configurarlo de la siguiente manera:
Object.defineProperty(window, 'innerHeight', { get : () => window.innerHeight * 2, }); Pero esto obviamente conduce a una recursividad infinita. ¿Cómo puedo redefinir una propiedad de ventana manteniendo una referencia a la propiedad original? Haciendo algo como let windowOld = Object.assign({}, window); simplemente capturará las propiedades de la ventana en ese momento estático y no mantendrá una referencia a las propiedades originales.
Por lo general, en esta situación, primero guardaría la propiedad existente en una variable, pero una complicación es que window.innerHeight es un getter/setter, no una propiedad estándar. Por lo tanto, guarde el getter/setter existente, luego defina la propiedad nuevamente (como getter/setter, nuevamente, para mantener la coherencia).
const { get, set } = Object.getOwnPropertyDescriptor(window, 'innerHeight'); Object.defineProperty( window, 'innerHeight', { get: () => get.call(window) * 2, set: (newVal) => set.call(window, newVal), } );