Часть II

методы

Поскольку мы уже рассмотрели основы объектов, давайте теперь углубимся в более сложные концепции, такие как методы, ключевые слова this, ключевые слова new и прототипы.

В JavaScript методы — это функции, которые присоединяются к объектам как свойства. Методы можно использовать для выполнения действий над объектом, изменения его свойств или возврата значений на основе свойств объекта(методы — это не что иное, как свойства, содержащие значения функций).

const person = {
  name: 'george',
  age: 30,
  greet() {
    console.log(`Hi,I am George.`);
  }
};

person.greet(); // Output: 'Hi,I am George.'

это (ключевое слово)

Метод объекта: this используется внутри метода объекта, он относится к объекту, свойством которого является метод.

const person = {
  name: 'george',
  age: 30,
  greet() {
    console.log(`Hi,I am ${this.name}.`);
  }
};

person.greet(); // Output: 'Hi,I am George.'
//there is same output,but there is other uses of this

В JavaScript ключевое слово this используется для ссылки на объект, которому принадлежит функция или к которому она вызывается. Конкретный объект, к которому относится «это», может меняться в зависимости от того, как вызывается функция и контекст, в котором она выполняется.

  1. Глобальный контекст: когда this используется в глобальном контексте (вне какой-либо функции), он относится к глобальному объекту, который является window в среде браузера и global в Node.js.
  2. Контекст функции: когда this используется внутри обычной функции, он ссылается на глобальный объект, если функция не вызывается с использованием одного из методов, указанных ниже.
  3. Вызов метода: когда метод вызывается с использованием записи через точку, например object.method(), this внутри метода относится к объекту, для которого вызывается метод.
  4. Вызов конструктора: когда функция вызывается с ключевым словом new для создания нового объекта, this внутри функции относится к новому создаваемому объекту.
const person = {
  name: 'John',
  age: 30,
  greet: function() {
    console.log(`Hi, my name is ${this.name} and I'm ${this.age} years old.`);
  }
};

person.greet(); // Output: Hi, my name is John and I'm 30 years old.

function introduce() {
  console.log(`My name is ${this.name} and I'm ${this.age} years old.`);
}

introduce(); // Output: My name is John and I'm 30 years old.

новый(ключевое слово)

В JavaScript ключевое слово new используется для создания экземпляра объекта на основе функции-конструктора. Функция-конструктор — это обычная функция, предназначенная для использования с ключевым словом new для создания объектов.

function Person(name, age) {
  this.name = name;
  this.age = age;
}

const person = new Person('george', 33);
console.log(person.name); // Output: 'george'
console.log(person.age); // Output: 33

В этом примере мы определяем функцию-конструктор с именем Person, которая принимает два аргумента name и age. Внутри функции-конструктора мы используем ключевое слово this, чтобы задать свойства name и age создаваемого экземпляра объекта. Чтобы создать экземпляр объекта Person, мы используем ключевое слово new, за которым следует функция-конструктор Person. с необходимыми аргументами. Результатом является экземпляр объекта со своими собственными свойствами name и age. Использование ключевого слова new с функцией-конструктором является распространенным способом создания нескольких экземпляров объекта с одинаковыми свойствами и поведением. Каждый экземпляр объекта, созданный с помощью ключевого слова new, независим и имеет собственный набор свойств и методов.

функция-конструктор — функция-конструктор — это особый тип функции, который используется для создания новых объектов с определенным набором свойств и методов. Функции-конструкторы обычно называются с заглавной буквы, чтобы отличить их от обычных функций.

прототипы

Прототипы — это фундаментальная концепция JavaScript, которая обеспечивает наследование объектов и помогает уменьшить дублирование кода. У каждого объекта в JavaScript есть прототип, который является ссылкой на другой объект, служащий шаблоном для первого объекта.

Вы можете создать прототип объекта с помощью метода Object.create() или с помощью функции-конструктора. Вот пример создания объекта с прототипом с помощью метода Object.create():

const animal = {
  makeSound() {
    console.log('Animal sound!');
  }
};

const dog = Object.create(animal);
dog.breed = 'Labrador';
dog.makeSound(); // Output: 'Animal sound!'

Прототип — это объект, связанный с функцией-конструктором. Прототип определяет свойства и методы, которые наследуются всеми экземплярами функции-конструктора. Разница между прототипами и объектами заключается в том, что прототипы определяют свойства и методы, которые являются общими для всех экземпляров. функции-конструктора, а объекты имеют собственный набор свойств и методов, уникальных для каждого экземпляра.

статические методы объекта

Статические методы в JavaScript — это методы, которые вызываются в функции-конструкторе объекта, а не в экземплярах объекта. Они могут быть полезны для выполнения операций, относящихся к классу в целом, а не к отдельным экземплярам класса.

статические методы очень полезны, давайте рассмотрим некоторые из них:

  1. Object.assign(): этот метод используется для копирования значений всех перечислимых собственных свойств из одного или нескольких исходных объектов в целевой объект.
  2. Object.keys(): этот метод возвращает массив имен всех собственных перечисляемых свойств объекта.
  3. Object.values(): этот метод возвращает массив значений всех собственных перечисляемых свойств объекта.
//.assign
const obj1 = { a: 1, b: 2, c: 3 };
const obj2 = { d: 4, e: 5 };

const newObj = Object.assign({}, obj1, obj2);

console.log(newObj); // Output: { a: 1, b: 2, c: 3, d: 4, e: 5 }
//.keys
const obj = { a: 1, b: 2, c: 3 };

const keys = Object.keys(obj);

console.log(keys); // Output: ['a', 'b', 'c']
//.values
const obj = { a: 1, b: 2, c: 3 };

const values = Object.values(obj);

console.log(values); // Output: [1, 2, 3]