JavaScript Методи об’єкту ES5
ECMAScript 5 (2009 року) додав багато нових методів об’єкту в JavaScript.
Управління об’єктами
// Створити об’єкт з існуючим об’єктом в якості прототипу
Object.create()
// Додавання або зміна властивості об’єкту
Object.defineProperty(object, property, descriptor)
// Додавання або зміна властивостей об’єкту
Object.defineProperties(object, descriptors)
// Доступ до властивостей
Object.getOwnPropertyDescriptor(object, property)
// Повертає всі властивості у вигляді масиву
Object.getOwnPropertyNames(object)
// Доступ до прототипу
Object.getPrototypeOf(object)
// Повертає перераховані властивості у вигляді масиву
Object.keys(object)
Захист об’єктів
// Попереджає додавання властивостей до об’єкту
Object.preventExtensions(object)
// Повертає true, якщо до об’єкту можна додати властивості
Object.isExtensible(object)
// Попереджає зміну властивостей об’єкту (не значень)
Object.seal(object)
// Повертає true, якщо об’єкт запечатаний
Object.isSealed(object)
// Попереджає будь-які зміни об’єкту
Object.freeze(object)
// Повертає true, якщо об’єкт заморожений
Object.isFrozen(object)
Зміна значення властивості
Синтаксис
Object.defineProperty(object, property, {value : value})
В цьому прикладі змінюється значення властивості:
Приклад
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
// Змінити властивість
Object.defineProperty(person, "language", {value : "NO"});
Спробуйте самі »
Зміна метаданих
ES5 дозволяє змінювати наступні метадані властивості:
writable : true // Значення властивості може бути змінено
enumerable : true // Властивість можна перерахувати
configurable : true // Властивість можна перелаштувати
writable : false // Значення властивості не може бути змінено
enumerable : false // Властивість не можна перерахувати
configurable : false // Властивість не можна перелаштувати
ES5 дозволяє змінювати гетери та сетери:
// Визначити гетер
get: function() { return language }
// Визначити сетер
set: function(value) { language = value }
Цей приклад робить language (мову) доступною лише для читання:
Object.defineProperty(person, "language", {writable:false});
В цьому прикладі language не перераховується:
Object.defineProperty(person, "language", {enumerable:false});
Список всіх властивостей
В цьому прикладі перераховані всі властивості об’єкту:
Приклад
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person); // Повертає масив властивостей
Спробуйте самі »
Список перераховуваних властивостей
В цьому прикладі перераховані лише перераховувані властивості об’єкту:
Приклад
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person); // Повертає масив перерахованих властивостей
Спробуйте самі »
Додавання властивості
В цьому прикладі до об’єкту додається нова властивість:
Приклад
// Створити об’єкт:
const person = {
firstName: "John",
lastName : "Doe",
language : "EN"
};
// Додати властивість
Object.defineProperty(person, "year", {value:"2008"});
Спробуйте самі »
Додавання гетерів та сетерів
Метод Object.defineProperty()
також можна використовувати для додавання гетерів та сетерів:
Приклад
//Створити об’єкт
const person = {firstName:"John", lastName:"Doe"};
// Визначити гетер
Object.defineProperty(person, "fullName", {
get: function () {return this.firstName + " " + this.lastName;}
});
Спробуйте самі »
Приклад лічильника
Приклад
// Визначити об’єкт
const obj = {counter:0};
// Визначити сетери
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 (i) {this.counter -= i;}
});
// Пограйте з лічильником:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
Спробуйте самі »