0

let obj = {
  name: 'hello',
  work(b) {
  alert( this.name + ' ' + b ); // произвольная функция или метод
},
};

function spy(func){

return function f(){

// return func.call(this, ...arguments); // this будет сылаться на объект obj ?
return func(); // func будет функция; this будет вызываться на глобальный объект ?

};

}

obj.work = spy(obj.work );

obj.work(1);

  1. Элемент списка

function f(x) {
  alert(x);
}

function delay(f, ms) {

let getThis = this;

let h = {
  name: 'hello',
  say() {
   alert(getThis.name)
  }
}
 h.say()

return setTimeout( () => { f(1) })

}

f = delay(f, 1000);

f(1)

  1. В переменную getThis записываем this т.к. delay вызывается в глобальном контексте в this будет ссылка на глобальный контекст ?
  2. Переменную getThis добавляем в метод объекта h переменная

function work(a, b) {
  console.log( a + b );
}

function spy(func){

function f(...d){ f.calls.push(d);

return func.call(this, ...arguments);

};

f.calls = []; return f }

work = spy(work);

work(1, 2); work(4, 5);

for (let args of work.calls) { alert( 'call:' + args.join() ); // "call:1,2", "call:4,5" }

getThis будет глобальный ?

function work(a, b) {
  console.log( a + b ); // произвольная функция или метод
}

function spy(func){

function f(...d){ f.calls.push(d);

return func.call(this, ...arguments);

};

f.calls = []; return f }

work = spy(work);

work(1, 2); work(4, 5);

for (let args of work.calls) { alert( 'call:' + args.join() ); // "call:1,2", "call:4,5" }

  1. эта функция func.call(this, ...arguments) this будет ссылаться на глобальный объект ?
  • что по вашему значит функция вызывается как глобальный объект? – ThisMan Sep 12 '19 at 22:16
  • @ThisMan правильнее сказать будет func.call(this, ...arguments) ; this будет ссылаться на глобальный объект ? – user349791 Sep 12 '19 at 22:17
  • this будет ссылаться на того, кто вызвал функцию f. В вашем примере work === f, а work вызывается в глобальном контексте, а значит this === глобальный объект. – Stepan Kasyanenko Sep 13 '19 at 04:57
  • @Stepan Kasyanenko можно проще func вызывается как функция значит this глобальный объект ? – user349791 Sep 13 '19 at 11:53
  • 2
    Нет, нельзя. Func вызывается через call и туда первым параметром идет this. Данный this будет зависеть от того, как вызван work. – Stepan Kasyanenko Sep 13 '19 at 12:55
  • @Stepan Kasyanenko 1) скажите в первый блок кода выполняется d(); в переменную копируем this 2) и переменную добавляем в метод объекта this будет глобальный ? – user349791 Sep 13 '19 at 17:56
  • @Stepan Kasyanenko Если убрать call то func будет вызываться как функция значит глобальный объект ? – user349791 Sep 13 '19 at 23:17
  • @Stepan Kasyanenko если перед work будет стоять объект obj.work() то** this ** будет вызываться как метод объекта значит получит доступ к информации объекта, а у func убрать ** call** то у ** func this ** будет ссылаться на глобальный объект – user349791 Sep 13 '19 at 23:21
  • Вы поменяли вопрос, у теперь у вас там три вопроса и вообще ничего не понятно, чего вы хотите. – Stepan Kasyanenko Sep 16 '19 at 06:08
  • @Stepan Kasyanenko вечером добавлю код ... спасибо за внимание – user349791 Sep 16 '19 at 06:58
  • @Stepan Kasyanenko посмотрите пожалуйста – user349791 Sep 16 '19 at 23:19
  • У вас в вопросе 5 вопросов. Вы что хотите узнать? Могу ответить только так. да, да - но не правильная формулировка, да, да, да. – Stepan Kasyanenko Sep 17 '19 at 04:52
  • @Stepan Kasyanenko правильно понял что надо задать 5 вопросов ? – user349791 Sep 17 '19 at 04:53
  • @Stepan Kasyanenko1) я хочу узнать как ведет себя this когда передается в другую функцию,2) Что происходит this когда вызывается функция с this в другой функции 3) Как ведет себя this когда мы в другой функции, объекте вызываем this через call или apply 4) что происходит когда this сохраняется в переменную, а потом куда-нибудь эта переменная передается и т.д. – user349791 Sep 17 '19 at 05:33
  • Мне кажется, данный ресурс немного не про это. Вы сможете найти ответы на ваши вопросы в любой книге, посвященный js. Например, this и call\apply – Stepan Kasyanenko Sep 17 '19 at 09:31
  • @Stepan Kasyanenko ясно, спасибо за внимание ... – user349791 Sep 18 '19 at 01:08

0 Answers0