1

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

Regent
  • 19,134
  • Контекст вызова функции задаётся в месте вызова функции - изнутри функции его не поменять – Regent Dec 29 '20 at 10:49
  • интересно какова цель задачи? возможно решения есть в другой плоскости – Daniil Loban Dec 29 '20 at 13:08

2 Answers2

3

Реализовать можно через bind

Метод bind() создаёт новую функцию, которая при вызове устанавливает в качестве контекста выполнения this предоставленное значение. В метод также передаётся набор аргументов, которые будут установлены перед переданными в привязанную функцию аргументами при её вызове.

Смотрите btnfn2 в примере:

function fun() {
  console.log(this.xx)
}
fun.xx = Math.random();
function btnfn1() {
  fun();
}
function btnfn2() {
  const fn = fun.bind(fun);
  fn();
}
<button onclick="btnfn1()">btn1</button>
<button onclick="btnfn2()">btn2</button>

С тем же эффектом можно вызвать функцию через call и apply.

nörbörnën
  • 12,192
  • 5
  • 29
  • 40
2

Может, вот пример:

function someFunc(){
  console.log( this === someFunc );
}

someFunc.call( someFunc );

Ещё пример, где функция сама задаёт свой this, вызывая себя рекурсивно один раз:

function myFunc(){
  // Обеспечиваем this === myFunc
  if( this !== myFunc ) return myFunc.call(myFunc);

// Тут нужные действия пишем... console.log('123'); // ... например проверяем this console.log( this === myFunc ); }

myFunc();