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);
- Элемент списка
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)
- В переменную getThis записываем this т.к. delay вызывается в глобальном контексте в this будет ссылка на глобальный контекст ?
- Переменную 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"
}
- эта функция func.call(this, ...arguments) this будет ссылаться на глобальный объект ?
thisбудет ссылаться на того, кто вызвал функциюf. В вашем примереwork === f, аworkвызывается в глобальном контексте, а значитthis === глобальный объект. – Stepan Kasyanenko Sep 13 '19 at 04:57Funcвызывается черезcallи туда первым параметром идетthis. Данныйthisбудет зависеть от того, как вызванwork. – Stepan Kasyanenko Sep 13 '19 at 12:55