--- title: setter slug: Web/JavaScript/Referencia/Funciones/set translation_of: Web/JavaScript/Reference/Functions/set ---
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) { . . . }}
prop
val
expression
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:
delete lenguaje.actual;
defineProperty
Para añadir un setter a un objeto existente, use {{jsxref("Object.defineProperty()")}}
consr 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
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"
Specification | Status | Comment |
---|---|---|
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}} | {{Spec2('ES5.1')}} | Definición inicial. |
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ES6')}} | Se añaden las propiedades computadas. |
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatChrome(1)}} | {{ CompatGeckoDesktop("1.8.1") }} | {{ CompatIE(9) }} | 9.5 | 3 |
Computed property names | {{CompatNo}} | {{ CompatGeckoDesktop("34") }} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{ CompatGeckoMobile("1.8.1") }} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Computed property names | {{CompatNo}} | {{CompatNo}} | {{ CompatGeckoMobile("34.0") }} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |