Методы и свойства, объявленные внутри конструктора класса, хранятся в экземпляре объекта, созданного при использовании оператора new. Это означает, что каждый экземпляр объекта будет иметь свою собственную копию методов и свойств, объявленных в конструкторе.
Например, если у нас есть класс Person с конструктором, который устанавливает имя и возраст объекта, а также метод sayHello(), который выводит приветствие на консоль, то метод sayHello() будет храниться в каждом экземпляре объекта Person:
class Person {
constructor(name, age) {
this.name = name
this.age = age
this.sayHello = function () {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`)
}
}
}
const person1 = new Person("Alice", 25)
const person2 = new Person("Bob", 30)
person1.sayHello() // 'Hello, my name is Alice and I'm 25 years old.'
person2.sayHello() // 'Hello, my name is Bob and I'm 30 years old.'В этом примере метод sayHello() объявлен в конструкторе класса Person, и каждый раз, когда мы создаем новый экземпляр объекта Person с помощью оператора new, мы создаем новую копию метода sayHello() внутри объекта.
Свойства и методы, объявленные за конструктором, но внутри класса, хранятся в прототипе класса. Это означает, что они не будут храниться в каждом экземпляре объекта, а будут общими для всех экземпляров, созданных с помощью класса.
Например, если у нас есть класс Person с методом sayHello(), объявленным за конструктором, то этот метод будет храниться в прототипе класса Person:
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`)
}
}
const person1 = new Person("Alice", 25)
const person2 = new Person("Bob", 30)
person1.sayHello() // 'Hello, my name is Alice and I'm 25 years old.'
person2.sayHello() // 'Hello, my name is Bob and I'm 30 years old.'В этом примере метод sayHello() объявлен за конструктором, но внутри класса. Он будет храниться в прототипе класса Person, а не в каждом экземпляре объекта Person. Таким образом, все экземпляры объекта Person будут иметь доступ к одной и той же копии метода sayHello().