
JavaScript
Если наша функция определена вне объекта obj, почему значением this является наш объект obj?
Вопрос про контекст "this"

Потому что this в JavaScript является свободным, в том смысле что оно не привязано никакому объекту. Значение this вычисляется именно во время вызова метода объекта.
Например, в коде может быть одна общая функция которая приветствует пользователя со своим именем, этаже функция может быть использована в разных объектах, полный пример есть ниже.
Есть фукнция hello которая вызывает alert и выводит сообщение "Привет, this.name" где this - это текущий объект на котором был вызван метод объекта, name - свойство в котором хранится имя. Далее в коде есть два объекта это mark и david, оба имеют свойство name со своими именами и метод приветствия sayHi.
Когда в коде вызываем mark.sayHi(); вызывается функция hello по ссылке через метод sayHi, в качестве значения this присваивается объект mark, то есть во время вызова this = mark, потому что вызываем метод используя объект mark. Тоже самое происходит и с объектом david, если обратить внимание каждый выводит сообщение со своим именем, потому что this - это объект перед точкой, на котором вызвается метод.
Если нужна более детальная информация о this и о том как оно устроено в JavaScript, ниже есть ссылке, где можно узнать об этом более подробно.
https://learn.javascript.ru/object-methods
https://learn.javascript.ru/reference-type
Например, в коде может быть одна общая функция которая приветствует пользователя со своим именем, этаже функция может быть использована в разных объектах, полный пример есть ниже.
Есть фукнция hello которая вызывает alert и выводит сообщение "Привет, this.name" где this - это текущий объект на котором был вызван метод объекта, name - свойство в котором хранится имя. Далее в коде есть два объекта это mark и david, оба имеют свойство name со своими именами и метод приветствия sayHi.
Когда в коде вызываем mark.sayHi(); вызывается функция hello по ссылке через метод sayHi, в качестве значения this присваивается объект mark, то есть во время вызова this = mark, потому что вызываем метод используя объект mark. Тоже самое происходит и с объектом david, если обратить внимание каждый выводит сообщение со своим именем, потому что this - это объект перед точкой, на котором вызвается метод.
function hello() {
alert(`Привет, я ${this.name}!`);
}
const mark = {
name: "Марк",
sayHi: hello
};
const david = {
name: "Дэвид",
sayHi: hello
};
mark.sayHi();
david.sayHi();
Особенность свободного this в JavaScript может иметь свои плюсы и минусы, плюс в том, что можно использовать одну общую функцию для разных объектов в качестве метода и можно взаимстовать метод от другого объекта к другому, а минус в том что такая свобода требует от программиста большой отвественности и внимательности, потому что свободный this может запутать программиста и ввести в заблуждение. Если нужна более детальная информация о this и о том как оно устроено в JavaScript, ниже есть ссылке, где можно узнать об этом более подробно.
https://learn.javascript.ru/object-methods
https://learn.javascript.ru/reference-type
Потому что функция вызвана внутри объекта. Функции легко меняют контекст в зависимости от места вызова.
У тебя метод (method) на obj вызывает функцию foo, и в этом случае контекст this передается как ссылка на объект obj, в котором определен метод method.
Похожие вопросы
- Не понимаю смысл указателя this: зачем он нужен, к пример, в данной функции:
- Возврат, Задержка, и потерянный This (подробности внутри)
- Подскажите про JavaScript про this
- Я не понимаю для чего нужен return в javascript. Да он возврошает число, но пффф в контексте какой от него толк???
- Что значит "чистый Javascript"?
- Можно ли на Прототипах сделать "Статический приватный метод"?
- Я не понимаю... Зачем нужен this в javascript?
- Интересный вопрос: У кого-то получиться скопировать текст из следующей страницы:
- Здравствуйте, такой вопрос...
- Знатоки, ответьте пожалуйста ответ на общий вопрос про Set & Map