Что именно делает new() в js

Мы часто используем новый оператор в нашей повседневной разработке, чтобы посмотреть, что он делает;

И принцип его реализации В javascript есть два способа создания объектов: ① объектный литерал ② новое выражение

// 字面量形式
let person = {
   name: '王新焱',
   age: 33
}

// 构造函数形式 (new)
function Person(name, age) {
  this.name = name
  this.age = age
}

пусть человек = новый человек ()

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

Новое выражение используется вместе с конструктором, а новый конструктор используется для наследования свойств конструктора.

Чтобы создать новый экземпляр Person, необходимо использовать новый оператор. Вызов конструктора таким образом будет проходить через следующие 4 шага:
① Создать пустой простой объект JavaScript (например, {})
② Добавить атрибут __proto__ к вновь созданному объекту и связать атрибут с прототипом объекта конструктора
③ Использовать только что созданный объект в качестве контекста этого
④ Вернуть новый объект

Что такое конструктор?
Функция, которая создает экземпляр объекта с помощью нового имени функции, называется конструктором. Между конструктором и обычной функцией нет большой разницы.Чтобы отличить функцию, первая буква имени которой написана с заглавной буквы как конструктора, основная функция заключается в том, что конструктор создает объект с помощью нового ключевого слова и добавляет свойства и методы к инициализированному объекту.


Конструкторы технически являются обычными функциями. Но есть две условности:

① Их имена начинаются с заглавной буквы.
② Они могут быть выполнены только «новым» оператором.

Вот пример конструктора:


// 构造函数Person

function Person(name, age) {
  this.name = name
  this.age = age
}

let p = new Person('王新焱', 33)

console.log(p) // { name: '王新焱', age: 33 }

p.constructor === Person // true

p.__proto__ === Person.prototype // true

рекомендация

отblog.csdn.net/qq_34402069/article/details/129544960