> For the complete documentation index, see [llms.txt](https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/obekty/this-kontekst-ispolneniya.md).

# this - контекст исполнения

## Обращение к свойству внутри метода

Если метод объекта должен работать со значением свойства объекта, то можно обращаться к такому свойству, как обычно, через объект.

Но, наша задача - создание переиспользуемого кода, то есть, наши методы должны уметь работать не только в привязке к объекту, которому принадлежат, но с другими объектами, у которых хранятся подобные данные и свойства, как у текущего объекта.

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

Я могу получать сколько угодно новых объектов пользователей, но им уже не нужно иметь такой же набор методов и тратить на это заветную память. Мы можем использовать методы нашего основного объекта пользователя в контексте всех остальных подобных объектов, главное, чтобы внутри методов, обращением к свойствам было через this, а не через конкретное имя объекта.

```
const user = {
    name: 'user',
    toGreetUser(greeting, info) {
        return `Hello ${this.name}! ${greeting} ${info}`;
    }
}

user.toGreetUser('We are glad to see you!', 'My name is Bot');
```

А как можно использовать метод toGreetUser(), который принадлежит объекту user для других объектов?

Нужно `прикалывать` контекст исполнения в новом объекте. Для этого существуют методы: `call`, `apply` & `bind`. Call & apply - используется в мгновенных вызовах, bind - используется, если метод передаем в качестве колбека, который будет вызван не мгновенно, а при вызове функции, в которую передан.

Отличие `call` & `apply` заключается в передаче аргументов, после указания объекта, в контексте которого должен быть вызван метод.

Call ожидает аргументы просто перечисленные через запятую после объекта.

Apply ожидает все аргументы, собранные в массив `[]`.

Bing, как call, только для колбеков.

```
const newUser = {
    name: 'Sandra',
}

user.toGreetUser.call(newUser, 'We are glad to see you!', 'My name is Bot')
user.toGreetUser.apply(newUser, ['We are glad to see you!', 'My name is Bot'])

function authUser(callback){
    callback()
};

let result = authUser(
  user.toGreetUser.bind(newUser, 'We are glad to see you!', 'My name is Bot')
);
console.log(result);
```
