JavaScript Object.defineProperty()
- Página anterior defineProperties()
- Página siguiente entries()
- Volver a la capa superior Manual de referencias de objetos JavaScript
Definición y uso
Object.defineProperty()
El método se utiliza para agregar o modificar propiedades del objeto.
Object.defineProperty()
El método permite cambiar los metadatos de las propiedades.
Object.defineProperty()
El método permite agregar getter y setter.
Métodos relacionados:
Object.defineProperty()
Añadir o modificar propiedades.
Object.defineProperties()
Añadir o modificar múltiples propiedades.
Object.getOwnPropertyNames()
Devuelve todos los nombres de propiedades del objeto.
Object.getOwnPropertyDescriptor()
Devuelve la descripción de la propiedad.
Object.getOwnPropertyDescriptors()
Devuelve la descripción de todas las propiedades del objeto.
Instancia
Ejemplo 1
Añadir propiedad:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "EN" }; // Añadir una nueva propiedad Object.defineProperty(person, "year", {value:"2008"});
Ejemplo 2
Modificar propiedad:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "EN" }; // 修改一个属性 Object.defineProperty(person, "language", {value:"NO"});
Ejemplo 3
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "NO" }; // 修改一个属性 Object.defineProperty(person, "language", { value: "EN" writable: true, enumerable: true, configurable: true }); // 枚举属性 let txt = ""; for (let x in person) { txt += person[x] + "<br>"; } // Mostrar propiedad document.getElementById("demo").innerHTML = txt;
Ejemplo 4
El siguiente ejemplo es idéntico al anterior, pero oculta la propiedad 'language' para que no sea enumerable:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "NO" }; // 修改一个属性 Object.defineProperty(person, "language", { value: "EN" writable: true, enumerable: false, configurable: true }); // 枚举属性 let txt = ""; for (let x in person) { txt += person[x] + "<br>"; } document.getElementById("demo").innerHTML = txt;
例子 5
此例创建了一个 setter 和 getter,以确保 language 属性的更新为大写:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" language: "NO" }; // 修改一个属性 Object.defineProperty(person, "language", { get: function() { return language }, set: function(value) { language = value.toUpperCase() } }); // 修改 language person.language = "en"; // 显示 language document.getElementById("demo").innerHTML = person.language;
例子 6
此例使用 getter 将 firstName 和 lastName 连接起来:
// 创建一个对象 const person = { firstName: "Bill", lastName: "Gates" }; // 定义一个 Getter Object.defineProperty(person, "fullName", { get: function () { return this.firstName + " " + this.lastName; } });
例子 7
JavaScript 的 Getter 和 Setter 非常适合创建计数器:
// 定义 Setter 和 Getter Object.defineProperty(obj, "reset", { get: function () { this.counter = 0; } }); Object.defineProperty(obj, "increment", { get: function () { this.counter++; } }); Object.defineProperty(obj, "decrement", { get: function () { this.counter--; } }); Object.defineProperty(obj, "add", { set: function (value) { this.counter += value; } }); Object.defineProperty(obj, "subtract", { set: function (value) { this.counter -= value; } });
Sintaxis
Object.defineProperty(object, property, descriptor)
parámetros
parámetros | Descripción |
---|---|
object | Requerido. Objeto objetivo. |
property | Requerido. Nombre del atributo. |
descriptor |
Requerido. Descripción del atributo a agregar o modificar:
|
Valor devuelto
Tipo | Descripción |
---|---|
Object | Objeto modificado. |
Compatibilidad con navegadores
Object.defineProperty()
Es una característica de ECMAScript5 (ES5).
Desde julio de 2013, todos los navegadores modernos admiten completamente ES5 (JavaScript 2009):
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 23 | IE/Edge 11 | Firefox 21 | Safari 6 | Opera 15 |
Septiembre de 2012 | Septiembre de 2012 | Abril de 2013 | Julio de 2012 | Julio de 2013 |
- Página anterior defineProperties()
- Página siguiente entries()
- Volver a la capa superior Manual de referencias de objetos JavaScript