Мы часто используем новый оператор в нашей повседневной разработке, чтобы посмотреть, что он делает;
И принцип его реализации В 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