Is there way to assign setter/getter to existing object via =
sign?
window.somesetter = set(v) {};
window.somesetter = function set(v) {};
window.somesetter = set settername(v) {};
I'd say no. But the answer is "kinda yes" if you use a proxy instead of the object itself.
But this is black magic and by all means is NOT recommended for production :)
const winProxy = new Proxy(window, {
set(target, name, value) {
if (typeof value === 'function' && {set: 1, get: 1}[value.name]) {
const descriptor = Reflect.getOwnPropertyDescriptor(target, name) || {
enumerable: false,
configurable: true,
}
descriptor[value.name] = value
Reflect.defineProperty(target, name, descriptor)
} else {
Reflect.set(target, name, value)
}
}
})
winProxy.someProp = function set(v) {
console.log('setter', v);
}
winProxy.someProp = function get() {
console.log('getter')
}
window.someProp = 1;
window.someProp