est à quoi assigner Setter / Getter à l'objet existant via = code> signe?
3 Réponses :
Essayez ce formulaire:
window.somesetter = function (v) {};
Ce n'est ni un getter code>
/ Setter code >
ni différent du deuxième exemple de la question de l'OP.
non, il n'y a pas.
Si vous souhaitez affecter un seigteur ou getter à un objet existant, utilisez P> defineProperty code>. p>
Object.defineProperty(window, 'setter', {
set: function(value) { window.test = value }
});
window.setter = "Hello";
console.log(window.test);
Cela fera une propriété avec configurable code> et
énumérable code> false, ce qui n'est pas identique.
Je dirais non. Mais la réponse est "un peu oui" si vous utilisez un proxy au lieu de l'objet lui-même.
Mais c'est la magie noire et par tous les moyens est pas recommandé em> pour la production :) p> p> 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
Voulez-vous avoir plusieurs fonctions de setter différentes avec le même nom / sous la même propriété?
Je veux avoir un setter pour une propriété, avec le même nom si c'est possible et sans
objet.define () code>.
Quel est le problème avec
objet.defineproperty code>? La question ressemble à Le XY problème