Baseline Widely available
La sintaxis set
asocia la propiedad de un objeto a una función que será llamada cuando haya un intento de asignar valor a esa propiedad.
{set prop(val) { . . . }} {set [expression](val) { . . . }}Parámetros
prop
El nombre de la propiedad a asociar con la función dada.
val
Un alias para la variable que contiene el valor a asignar a la propiedad.
expression
A partir de ECMAScript 2015, se puede también usar expresiones para nombres de propiedades computados para asociar a la función dada.
En JavaScript, un setter puede ser usado para ejecutar una función donde sea que una propiedad se intente cambiar. Los setters son regularmente usados en conjunto con getters para crear un tipo de pseudo-propiedad. No es posible tener simultáneamente un setter en una propiedad que ya tiene un valor.
Tenga en cuenta lo siguiente al trabajar con setters:
set
o con otra entrada de datos con la misma propiedad. ( { set x(v) { }, set x(v) { } }
y { x: ..., set x(v) { } }
están prohibidos )En el siguiente ejemplo definimos una pseudo-propiedad actual
al objeto lenguaje
. Cuando se le asigne un valor a actual
, actualiza log
con ese valor:
var lenguaje = {
set actual(mensaje) {
this.log.push(mensaje);
},
log: [],
};
lenguaje.actual = "ES";
console.log(lenguaje.log); // ['ES']
lenguaje.actual = "FR";
console.log(lenguaje.log); // ['ES', 'FR']
Note que actual
no está definido y cualquier intento de accederlo devolverá undefined
.
delete
Si desea eliminar el setter, puede simplemente aplicar delete
en él:
defineProperty
Para añadir un setter a un objeto existente, use Object.defineProperty()
const o = { a: 0 };
Object.defineProperty(o, "b", {
set: function (x) {
this.a = x / 2;
},
});
o.b = 10; // Ejecuta el setter, el cual asigna 10 / 2 (5) a la propiedad 'a'
console.log(o.a); // 5
Usando un nombre de propiedad computado
Nota: Propiedades computadas son 'experimental technology', parte de la propuesta para ECMAScript 6, y no está soportado en todos los navegadores. Dará error de sintaxis en entornos no soportados.
const expr = "foo";
var obj = {
baz: "bar",
set [expr](v) {
this.baz = v;
},
};
console.log(obj.baz); // "bar"
obj.foo = "baz"; // ejecuta el setter
console.log(obj.baz); // "baz"
Especificaciones Compatibilidad con navegadores Ver también
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4