Методы и свойства, объявленные внутри конструктора класса, хранятся в экземпляре объекта, созданного при использовании оператора 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().