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