, По сути, когда вы используете функцию стрелки, она не создает свой собственный контекст "this". Таким образом, использование «this» будет ссылаться на контекст родительской функции. Вот как будет выглядеть код:

от вопрос уже есть ответ здесь:

Как получить доступ к правильному `this` внутри обратного вызова? 10 ответов

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

Например,

var sampleObject = function() {
 this.foo = 123;
}

sampleObject.prototype.getFoo = function() {
 var nested = function() {
  return this.foo;
 }
 return nested();
}

var test = new sampleObject();

window.alert(test.getFoo()); // undefined

this.foo не относится к значению 123, но не определено, так как относится к вложенной функции, в которой нетfoo существует. Как получить доступ к значению 123 из вложенной функции?

Ответы на вопрос(1)

Решение Вопроса
sampleObject.prototype.getFoo = function() {
 var me = this;
 var nested = function() {
  return me.foo;
 }
 return nested;
}

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

 vsync25 окт. 2012 г., 22:31
но это не хорошо, потому что с помощью ссылки на функцию мы теряемthis это так важно для прототипирования, такvar me = this; в вашем примере будет указывать наwindow объект
 Mohamed Allal13 янв. 2018 г., 19:12
просто примечание, здесь в приведенном выше примере вложенная функция является замыканием, и я буду привязываться к функции даже после возврата. я буду в замыкании вложенности. И вложенный будет просто отлично работать, потому что он меня часть, и он ссылается на экземпляр sampleObject
 Pointy25 окт. 2012 г., 22:40
@ vsync ах хорошо, извините, я неправильно прочитал ваш вопрос. Да, в этом случае вам нужно либо обернуть вызов в анонимную функцию, либо использовать.bind() или что-то, чтобы сделать это для вас.
 Pointy25 окт. 2012 г., 15:19
@vsync, что должно быть хорошо - если у вас возникли проблемы с чем-то подобным, я предлагаю вам открыть новый вопрос с примером кода, который вызывает трудности.
 vsync25 окт. 2012 г., 07:27
и что будет если я сделаю:var foo = new sampleObject(); $(window).on('scroll', foo.getFoo );

Ваш ответ на вопрос