@Alex_535

Как работает выражение apply(this, arguments) в Javascript?

Здравствуйте, читаю книгу по JS, там был наведен такой пример:
function not(f) {
  return function() { 
	  var result = f.apply(this, arguments); // ??? 
  return !result; 
  }; 
}

Отдельно смысл работы apply вроде понял, первый аргумент это контекст вызова, а второй массив (или псевдомассив как в случае с arguments ) элементов. Отдельно This и arguments вроде тоже, но как то проблематично понять как работает эта конструкция:
f.apply(this, arguments)
В функции ведь this будет указывать на глобальный объект, какой какой смысл тогда в "apply(this)" ? часто вижу это но туплю что-то, гугл не особо помог(
  • Вопрос задан
  • 812 просмотров
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Пример заключается в демонстрации передачи заранее неизвестного количества аргументов в функцию. В JS нет конструкции для передачи одних только аргументов, используя текущий контекст, поэтому чтобы в вызываемой функции контекст был правильный его явным образом передают первым аргументом apply, по-другому просто никак.
Ответ написан
hahenty
@hahenty
('•')
анонимную функцию, возвращаемую из not(), можно отдельно забиндить или вызвать на другом контексте, что позволит выполнять f с этим контекстом.
function func(a,b,c) { return this[a] === b + c; }
var ifunc = not( func );
/****/
var obj = { 'prop' : 10, 'attr' : true };
/****/
  ifunc.call( obj, 'prop', 4, 6 )

метод call также переопределяет контекст при вызове функции, как и apply, разница в подстановке аргументов.

В другом случае можно генерировать методы для каких-нибудь объектов, причем с привязкой к прототипу.
function equal( a ) { return this.prop === a; }
/*...*/.prototype.eq = equal;
/*...*/.prototype.neq = not( equal );


А глобальный контекст вызывается обычно без явного указания для this.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы