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

Чем отличается Object.create() от new в JavaScript?

1️⃣ Как кратко ответить

Object.create() создает новый объект с указанным прототипом, без вызова конструктора, тогда как new создает объект, вызывая функцию-конструктор, и устанавливает прототип объекта в prototype этой функции.

2️⃣ Подробное объяснение темы

В JavaScript существуют разные способы создания объектов, и два из них — это использование Object.create() и оператора new. Оба метода имеют свои особенности и применяются в разных ситуациях.

Object.create()

Object.create(proto) создает новый объект, используя указанный объект proto в качестве прототипа. Это позволяет создавать объекты с определенной цепочкой прототипов без необходимости вызова конструктора.

Пример использования Object.create():

const animal = {
  speak: function() {
    console.log("Animal sound");
  }
};
​
const dog = Object.create(animal);
dog.speak(); // Выведет: "Animal sound"
  • const animal = {...}: Создаем объект animal с методом speak.
  • const dog = Object.create(animal);: Создаем объект dog, который наследует от animal.
  • dog.speak();: Вызываем метод speak, который унаследован от animal.

Object.create() полезен, когда нужно создать объект с определенной цепочкой прототипов, не вызывая конструктор.

new

Оператор new используется для создания экземпляра объекта, вызывая функцию-конструктор. Он создает новый объект, устанавливает его прототип в prototype функции-конструктора и вызывает эту функцию с контекстом нового объекта.

Пример использования new:

function Animal() {
  this.speak = function() {
    console.log("Animal sound");
  };
}
​
const dog = new Animal();
dog.speak(); // Выведет: "Animal sound"
  • function Animal() {...}: Определяем функцию-конструктор Animal.
  • const dog = new Animal();: Создаем новый объект dog с помощью new, вызывая функцию-конструктор Animal.
  • dog.speak();: Вызываем метод speak, который был определен в конструкторе.

new используется, когда нужно создать объект и инициализировать его с помощью конструктора, который может выполнять дополнительные действия, такие как установка начальных значений.

Сравнение

  • Прототип: Object.create(proto) позволяет явно указать прототип, тогда как new устанавливает прототип в prototype функции-конструктора.
  • Вызов конструктора: Object.create() не вызывает конструктор, а new вызывает.
  • Инициализация: new позволяет выполнять инициализацию объекта в конструкторе, Object.create() — нет.

Выбор между Object.create() и new зависит от задачи: если нужно просто создать объект с определенной цепочкой прототипов, используйте Object.create(). Если требуется инициализация объекта с помощью конструктора, используйте new.

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки