Если наша функция определена вне объекта obj, почему значением this является наш объект obj?
JavaScript
Если наша функция определена вне объекта obj, почему значением this является наш объект obj?
Вопрос про контекст "this"
Если наша функция определена вне объекта obj, почему значением this является наш объект obj?Потому что 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