No código desta aula, no Call é passado user e o this.nome e this.email:
function exibeMensagem(nome, email) {
console.log(`usuário: ${nome}, email ${email}`)
}
const user = {
nome: 'Mariana',
email: 'm@m.com',
executaFuncao: function(fn) {
fn.call(user, this.nome, this.email)
}
}
user.executaFuncao(exibeMensagem) //usuário: Mariana, email m@m.com
O retorno compreendi tudo certinho. Agora se eu tento passar no call um outro objeto ele não funciona user2:
const user2 = {
nome: 'Juliana',
email: 'ju@m.com'
}
function exibeMensagem(nome, email) {
console.log(`usuário: ${nome}, email ${email}`)
}
const user = {
nome: 'Mariana',
email: 'm@m.com',
executaFuncao: function(fn) {
fn.call(user2, this.nome, this.email)
}
}
user.executaFuncao(exibeMensagem) //usuário: Mariana, email m@m.com
Agora se eu usar o this dentro da função exibeMensagem ai sim funciona:
const user2 = {
nome: 'Juliana',
email: 'ju@m.com'
}
function exibeMensagem(nome, email) {
console.log(`usuário: ${this.nome}, email ${this.email}`)
}
const user = {
nome: 'Mariana',
email: 'm@m.com',
executaFuncao: function(fn) {
fn.call(user2, this.nome, this.email)
}
}
user.executaFuncao(exibeMensagem) //usuário: Juliana, email ju@m.com
Mais assim eu não estaria passando os parametros e sim passando o contexto de outro objeto, e a dúvida é: como eu passaria como parametro um outro objeto? como está no exemplo 2:
const user2 = {
nome: 'Juliana',
email: 'ju@m.com'
}
function exibeMensagem(nome, email) {
console.log(`usuário: ${nome}, email ${email}`)
}
const user = {
nome: 'Mariana',
email: 'm@m.com',
executaFuncao: function(fn) {
fn.call(user2, this.nome, this.email)
}
}
user.executaFuncao(exibeMensagem) //usuário: Mariana, email m@m.com