O que é o contexto numa função?
sobes.tech IA
Resposta da IA
O contexto (this) numa função JavaScript é determinado pela forma como a função foi chamada, e não por onde foi declarada. Ele indica o objeto ao qual a função pertence ou que a chama.
Formas de determinar o contexto:
-
Contexto global: Fora de funções, ou se a função for chamada sem um objeto explícito (
thisserá igual ao objeto globalwindowno navegador,globalno Node.js, ouundefinedno modo estrito).// No navegador console.log(this === window); // true function showContext() { console.log(this); } showContext(); // window -
Contexto do objeto (método): Se a função for chamada como método de um objeto (
obj.method()),thisdentro da função referenciará esse objeto.const user = { name: 'Alice', greet: function() { console.log(`Olá, meu nome é ${this.name}`); } }; user.greet(); // Olá, meu nome é Alice -
Contexto do construtor: Ao chamar uma função com a palavra-chave
new(new MyClass()), um novo objeto é criado, ethisdentro do construtor refere-se a esse novo objeto.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob -
Indicação explícita do contexto: Os métodos
call,applyebindpermitem definir explicitamente o valor dethispara a chamada da função.call(thisArg, arg1, arg2, ...): Chama a função comthisdefinido emthisArge argumentos passados individualmente.apply(thisArg, [argsArray]): Chama a função comthisdefinido emthisArge argumentos passados em forma de array.bind(thisArg, arg1, arg2, ...): Retorna uma nova função comthisfixado emthisArg.
function displayInfo(age) { console.log(`${this.name} tem ${age} anos.`); } const person = { name: 'Charlie' }; displayInfo.call(person, 30); // Charlie tem 30 anos. displayInfo.apply(person, [35]); // Charlie tem 35 anos. const bondedDisplayInfo = displayInfo.bind(person, 40); bondedDisplayInfo(); // Charlie tem 40 anos. -
Funções arrow: Funções arrow não têm seu próprio
this. Elas herdamthisdo ambiente léxico onde foram definidas.const anotherUser = { name: 'David', sayHello: function() { const innerArrow = () => { console.log(`Olá do arrow, ${this.name}`); }; innerArrow(); // `this` aqui é anotherUser, herdado de sayHello }, sayHelloBad: () => { // má prática para métodos de objetos console.log(`Olá do arrow, ${this.name}`); } }; anotherUser.sayHello(); // Olá do arrow, David // No navegador, fora do modo strict anotherUser.sayHelloBad(); // Olá do arrow, undefined (`this` - window)
Compreender o contexto é fundamental para trabalhar corretamente com objetos, métodos e manipuladores de eventos em JavaScript.