0

Здравствуйте, подскажите почему теряется контекст для method.say, почему он указывает на window вместо user, ведь в call указано что this ссылается на user?

var f = function(whatever) {  

    console.log(this);  
    console.log(this.name);  
    console.log(this.lastName);  

    whatever();
}

var user = {  
    "name": "John",  
    "lastName": "Snow"   
}

var method = {  
    "say": function() {  
        console.log(this.name + ' ' + this.lastName);  
    }  
}  

f.call(user, method.say);

1 Answers1

1

this для f, но не для whatever.

var f = function(whatever) {  

    console.log(this);  
    console.log(this.name);  
    console.log(this.lastName);  

    whatever();
}

var user = {  
    "name": "John",  
    "lastName": "Snow"   
}

var method = {  
    "say": function() {  
        console.log(this.name + ' ' + this.lastName);  
    }  
}  

f.call(user, method.say.bind(user));
var f = function(whatever) {  

    console.log(this);  
    console.log(this.name);  
    console.log(this.lastName);  

    whatever.call(this);
}

var user = {  
    "name": "John",  
    "lastName": "Snow"   
}

var method = {  
    "say": function() {  
        console.log(this.name + ' ' + this.lastName);  
    }  
}  

f.call(user, method.say);
Qwertiy
  • 123,725
  • Разве call не ссылает все this в функции на указанный контекст? Я думал это и на аргументы передаваемые функции с помощью call распространяется. – Дмитрий Mar 06 '16 at 13:36
  • @Дмитрий, нет, не так. – Qwertiy Mar 06 '16 at 19:27