Конструкторы объектов JavaScript
Пример
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
Считается хорошей практикой называть функции-конструкторы первой буквой в верхнем регистре.
Типы объектов (чертежи) (классы)
Примеры из предыдущих глав ограничены. Они создают только одиночные объекты.
Иногда нам нужен « чертеж » для создания множества объектов одного и того же «типа».
Способ создания «типа объекта» заключается в использовании функции конструктора объекта .
В приведенном выше примере function Person()
это функция конструктора объекта.
Объекты одного типа создаются вызовом функции-конструктора с new
ключевым словом:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
это ключевое слово
В JavaScript так называется this
объект, который «владеет» кодом.
Значением this
при использовании в объекте является сам объект.
В конструкторе функция this
не имеет значения. Это замена нового объекта. Значение this
станет новым объектом при создании нового объекта.
Обратите внимание, что this
это не переменная. Это ключевое слово. Вы не можете изменить значение this
.
Добавление свойства к объекту
Добавить новое свойство к существующему объекту очень просто:
Пример
myFather.nationality = "English";
Свойство будет добавлено в myFather. Не моей матери. (Не возражать против каких-либо других лиц).
Добавление метода к объекту
Добавить новый метод к существующему объекту очень просто:
Пример
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
Метод будет добавлен в myFather. Не моей матери. (Не возражать против каких-либо других лиц).
Добавление свойства в конструктор
Вы не можете добавить новое свойство в конструктор объекта так же, как вы добавляете новое свойство в существующий объект:
Пример
Person.nationality = "English";
Чтобы добавить новое свойство в конструктор, вы должны добавить его в функцию конструктора:
Пример
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Таким образом, свойства объекта могут иметь значения по умолчанию.
Добавление метода в конструктор
Ваша функция-конструктор также может определять методы:
Пример
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {
return this.firstName + " " + this.lastName;
};
}
Вы не можете добавить новый метод в конструктор объекта так же, как вы добавляете новый метод в существующий объект.
Добавление методов в конструктор объекта должно выполняться внутри функции-конструктора:
Пример
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
Функция changeName() присваивает значение имени свойству lastName человека.
Теперь вы можете попробовать:
myMother.changeName("Doe");
JavaScript знает, о каком человеке вы говорите, «заменяя» this на myMother .
Встроенные конструкторы JavaScript
В JavaScript есть встроенные конструкторы для нативных объектов:
new String() // A new String object
new Number() // A new Number object
new Boolean() // A new Boolean object
new Object() // A new Object object
new Array() // A new Array object
new RegExp() // A new RegExp object
new Function() // A new Function object
new Date() // A new Date object
Объекта Math()
нет в списке. Math
является глобальным объектом. Ключевое new
слово нельзя использовать в
Math
.
Вы знали?
Как вы можете видеть выше, в JavaScript есть объектные версии примитивных типов данных String
, Number
и Boolean
. Но нет смысла создавать сложные объекты. Примитивные значения намного быстрее:
Используйте строковые литералы ""
вместо new String()
.
Используйте числовые литералы 50
вместо new Number()
.
Используйте логические литералы true / false
вместо new Boolean()
.
Используйте литералы объектов {}
вместо new Object()
.
Используйте литералы массива []
вместо new Array()
.
Используйте литералы шаблонов /()/
вместо new RegExp()
.
Используйте функциональные выражения () {}
вместо new Function()
.
Пример
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new Object object
const x5 = []; // new Array object
const x6 = /()/ // new RegExp object
const x7 = function(){}; // new function
Строковые объекты
Обычно строки создаются как примитивы: firstName = "John"
Но строки также могут быть созданы как объекты с помощью new
ключевого слова:
firstName = new String("John")
Узнайте, почему строки не должны создаваться как объекты, в главе « Строки JS» .
Количество объектов
Обычно числа создаются как примитивы: x = 30
Но числа также могут быть созданы как объекты с помощью new
ключевого слова:
x = new
Number(30)
Узнайте, почему числа не должны создаваться как объекты, в главе JS Numbers .
Логические объекты
Обычно логические значения создаются как примитивы: x =
false
Но логические значения также можно создавать как объекты с помощью new
ключевого слова:
x = new Boolean(false)
Узнайте, почему булевы значения не должны создаваться как объекты, в главе JS Booleans .