«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему указатель «this» указывает на глобальный объект во вложенных функциях JavaScript?

Почему указатель «this» указывает на глобальный объект во вложенных функциях JavaScript?

Опубликовано 1 ноября 2024 г.
Просматривать:521

Why Does the \

Загадка указателя JavaScript "this" во вложенных функциях

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

Поведение указателя «this» определяется методом вызова функции в JavaScript. Существует три основных метода:

  1. Прямой вызов: someThing.someFunction(arg1, arg2, argN)

    • В этом методе указатель "this" ссылается на к объекту, вызывающему функцию, в данном случае someThing.
  2. Вызов функции с помощью call(): someFunction.call(someThing, arg1, arg2, argN)

    • Функция call() явно устанавливает указатель this на предоставленный объект, в данном случае на someThing.
  3. Вызов функции с помощью apply() : someFunction.apply(someThing, [arg1, arg2, argN])

    • Подобно call(), функция apply() устанавливает указатель "this" на предоставленный объект, но принимает вместо этого массив аргументов.

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

Чтобы явно указать поведение указателя «this», вы можете использовать следующие модификации. :

  1. Используйте std_obj.displayMe() вместо std_obj.displayMe; для явного вызова метода displayMe.
  2. Явно определите вложенную функцию с указателем this объекта: var doSomeEffects = function() { var that = this; ... }
  3. Используйте функции call() или apply(), чтобы установить указатель «this»: doSomeEffects.call(std_obj);

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

Заявление о выпуске Эта статья перепечатана по адресу: 1729291638. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3