Метод Object.defineProperty()
Добавить свойство:
// Создать объект:
const person = {
firstName: "Андрей",
lastName: "Щипунов",
language: "RU"
};
// Добавляем новое свойство
Object.defineProperty(person, "year", {value:"2008"})
Попробуйте сами »
Изменить свойство:
// Создаём объект:
const person = {
firstName: "Андрей",
lastName: "Щипунов",
language: "RU"
};
// Изменяем свойство
Object.defineProperty(person, "language", {value:"НЕТ"})
Попробуйте сами »
Больше примеров ниже!
Описание
Метод Object.defineProperty() добавляет или изменяет свойство объекта.
Метод Object.defineProperty() позволяет изменять метаданные свойств.
Метод Object.defineProperty() позволяет добавлять методы получения и установки.
Связанные методы:
Object.defineProperty() добавляет или изменяет одно свойство.
Object.defineProperties() добавляет или изменяет множество свойств.
Object.getOwnPropertyNames() возвращает имена свойств объекта.
Object.getOwnPropertyDescriptor() возвращает дескриптор свойства.
Object.getOwnPropertyDescriptors() возвращает дескрипторы всех свойств.
Синтаксис
Object.defineProperty(object, property, descriptor)
Параметры
| Параметр | Описание |
| object | Обязательно. Объект. |
| object | Обязательно. Имя свойства. |
| descriptor | Обязательно. Дескриптор свойства, которое нужно добавить или изменить: value: value writable : true|false enumerable : true|false configurable : true|false get : function set : function |
Возвращаемое значение
| Тип | Описание |
| Object | Переданный объект с внесенными изменениями. |
Больше примеров
// Создать объект:
const person = {
firstName:
"Андрей",
lastName : "Щипунов",
language : "НЕТ",
};
// Изменяем свойство:
Object.defineProperty(person, "language", {
value: "RU",
writable : true,
enumerable : true,
configurable : true
});
//
Перечислить свойства
let txt = "";
for (let x in person) {
txt += person[x] + "<br>";
}
// Отображение свойств
document.getElementById("demo").innerHTML =
txt;
Попробуйте сами »
Далее пример представляет собой тот же код, за исключением того, что он скрывает свойство языка из перечисления:
// Создать объект:
const person = {
firstName:
"Андрей",
lastName : "Щипунов",
language : "НЕТ",
};
// Изменяем свойство:
Object.defineProperty(person, "language", {
value: "RU",
writable : true,
enumerable : false,
configurable : true
});
//
Перечислить свойства
let txt = "";
for (let x in person) {
txt += person[x] + "<br>";
}
document.getElementById("demo").innerHTML =
txt;
Попробуйте сами »
Сеттеры и геттеры
В этом примере создаются методы установки и получения для защиты обновлений языка в верхнем регистре:
// Создать объект:
const person = {
firstName: "Андрей",
lastName : "Щипунов",
language : "НЕТ"
};
// Изменяем свойство:
Object.defineProperty(person, "language", {
get : function() { return
language },
set : function(value) { language = value.toUpperCase()}
});
// Изменить язык
person.language = "ru";
// Отображение язык
document.getElementById("demo").innerHTML = person.language;
Попробуйте сами »
В этом примере используется геттер для объединения имени и фамилии:
// Создать объект:
const person = {
firstName: "Андрей",
lastName : "Щипунов"
};
// Определить геттер
Object.defineProperty(person, "fullName", {
get: function () {return this.firstName + " " + this.lastName;}
});
Попробуйте сами »
JavaScript Геттеры и сеттеры идеально подходят для создания счетчиков:
// Определить сеттеры и геттеры
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;}
});
Попробуйте сами »
Поддержка браузера
Object.defineProperty() — функция ECMAScript5 (ES5).
ES5 (JavaScript 2009) полностью поддерживается во всех современных браузерах с июля 2013 года:
| Chrome 23 |
IE/Edge 11 |
Firefox 21 |
Safari 6 |
Opera 15 |
| Sep 2012 | Sep 2012 | Apr 2013 | Jul 2012 | Jul 2013 |