Функция как объект: свой контекст вызова у функции
Может ли функция сама для себя быть контекстом вызова (т.е. чтобы this функции указывал не на глобальный объект, а на саму функцию)? И если "да", то как это можно реализовать?
Ответы (2 шт):
Автор решения: Pavel Grishaev
→ Ссылка
Может, вот пример:
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();
Автор решения: nörbörnën
→ Ссылка
Реализовать можно через 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>