← Назад к вопросам

Какие знаешь методы класса Object?

2.0 Middle🔥 151 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы класса Object в JavaScript

Класс Object в JavaScript является базовым строительным блоком для всех объектов. Все объекты в JS (включая массивы, функции и т.д.) наследуют методы и свойства от Object.prototype. Знание этих методов критически важно для эффективной работы с объектами, их инспекции, защиты и манипуляции.

Статические методы (вызываются на самом классе Object)

Статические методы не вызываются на экземплярах объектов, а непосредственно на конструкторе Object.

Object.assign(target, ...sources)

  • Цель: Копирует значения всех перечисляемых свойств из одного или нескольких исходных объектов в целевой объект.
  • Возвращает: Целевой объект.
  • Важно: Выполняет поверхностное копирование. Если свойство является объектом, копируется ссылка, а не сам объект.
const target = { a: 1 };
const source = { b: 2, c: { d: 3 } };
const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 2, c: { d: 3 } }
console.log(target === result); // true (target был изменен)
console.log(source.c === result.c); // true (ссылка на внутренний объект сохранена)

Object.create(proto, [propertiesObject])

  • Цель: Создает новый объект с указанным прототипом (proto) и, опционально, свойствами.
  • Ключевое использование: Для создания объектов с конкретной цепочкой прототипов, часто используется в прототипном наследовании.
const parent = { greet() { console.log('Hello'); } };
const child = Object.create(parent);
child.greet(); // Hello

Object.keys(obj), Object.values(obj), Object.entries(obj)

  • Эти методы возвращают массивы для перечисляемых свойств объекта.
  • keys() возвращает массив ключей (имен свойств).
  • values() возвращает массив значений свойств.
  • entries() возвращает массив пар [ключ, значение].
  • Не включают свойства из цепочки прототипов.
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj));   // ['a', 'b', 'c']
console.log(Object.values(obj)); // [1, 2, 3]
console.log(Object.entries(obj)); // [['a', 1], ['b', 2], ['c', 3]]

Object.fromEntries(iterable)

  • Цель: Преобразует список пар [ключ, значение] (например, из Object.entries()) в новый объект.
  • Полезен для преобразования Map или других структур в объект.
const entries = [['a', 1], ['b', 2]];
const newObj = Object.fromEntries(entries);
console.log(newObj); // { a: 1, b: 2 }

Object.freeze(obj), Object.seal(obj), Object.preventExtensions(obj)

  • Это методы для контроля мутабельности объекта, создающие разные уровни защиты.
  • freeze(): Самый строгий уровень. Запрещает добавление, удаление и изменение существующих свойств. Объект становится полностью неизменяемым.
  • seal(): Запрещает добавление и удаление свойств, но позволяет изменять значения существующих свойств.
  • preventExtensions(): Запрещает только добавление новых свойств. Удаление и изменение значений разрешены.
  • Методы Object.isFrozen(), Object.isSealed(), Object.isExtensible() позволяют проверить состояние объекта.
const obj = { prop: 42 };
Object.freeze(obj);
obj.prop = 100; // Не изменится в строгом режиме, в нестрогом - игнорируется
delete obj.prop; // Не удалится
obj.newProp = 100; // Не добавится
console.log(obj); // { prop: 42 }

Object.getPrototypeOf(obj) и Object.setPrototypeOf(obj, prototype)

  • getPrototypeOf() возвращает прототип указанного объекта.
  • setPrototypeOf() динамически устанавливает прототип объекта другому объекту. Использование может негативно повлиять на производительность.

Object.hasOwn(obj, property) (новый) и Object.hasOwnProperty(prop) (через прототип)

  • Проверяют, содержит объект собственное (не inherited) свойство с указанным именем.
  • Object.hasOwn() является статическим и более надежным, так как работает даже если у объекта переопределен метод hasOwnProperty.
const obj = { a: 1 };
console.log(Object.hasOwn(obj, 'a')); // true
console.log(Object.hasOwn(obj, 'toString')); // false (toString из прототипа)

Методы, доступные через прототип (вызываются на экземплярах объектов)

Эти методы наследуются всеми объектами через Object.prototype.

obj.hasOwnProperty(prop)

  • Уже упомянут выше. Проверяет собственное свойство. Может быть переопределен или объект может не иметь этого метода (если создан через Object.create(null)).

obj.isPrototypeOf(object)

  • Проверяет, находится данный объект (obj) в цепочке прототипов другого объекта (object).

obj.propertyIsEnumerable(prop)

  • Возвращает true, если свойство является перечисляемым (то есть будет учитываться методами типа Object.keys() или в цикле for...in).

obj.toString() и obj.valueOf()

  • toString() возвращает строковое представление объекта. Часто переопределяется для пользовательских объектов.
  • valueOf() возвращает примитивное значение объекта. Используется JavaScript при преобразовании объекта к примитиву (например, в математических операциях).

Важные практические применения

  • Итерация по объектам: Object.keys(), values(), entries() являются стандартом для циклического прохода по свойствам объекта.
  • Создание и клонирование объектов: Object.create() для наследования, Object.assign() для поверхностного клонирования или смешивания свойств.
  • Защита данных: Object.freeze() для создания действительно неизменяемых конфигураций или констант.
  • Мета-программирование: Проверка собственных свойств (hasOwn) и прототипов (getPrototypeOf) часто используется в библиотеках и фреймворках для анализа структур данных.

Понимание этих методов позволяет не только эффективно манипулировать данными, но также глубоко понимать механизмы наследования, мутабельности и внутренней структуры объектов в JavaScript, что является обязательным для профессионального фронтенд-разработчика.

Какие знаешь методы класса Object? | PrepBro