Может ли функция сама для себя быть контекстом вызова (т.е. чтобы this функции указывал не на глобальный объект, а на саму функцию)? И если "да", то как это можно реализовать?
Asked
Active
Viewed 102 times
1
Regent
- 19,134
-
Контекст вызова функции задаётся в месте вызова функции - изнутри функции его не поменять – Regent Dec 29 '20 at 10:49
-
интересно какова цель задачи? возможно решения есть в другой плоскости – Daniil Loban Dec 29 '20 at 13:08
2 Answers
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>
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();