Métodos de objeto
O nome e o preço da caneca já estão juntos. À página ainda falta um trabalho pequeno que seja da caneca: montar a etiqueta, subir a contagem do carrinho, cumprimentar quem compra. Essa função fica no objeto. Isso é um método.
Depois das chaves e das listas
A lição das propriedades acrescentou um campo, tirou outro, perguntou com in, entrou num objeto aninhado e listou nomes com Object.keys. Ali nenhuma função correu. Aqui o valor de uma propriedade é uma função, e ela corre a partir do objeto que a guarda.
Cinco movimentos com um método
📊 Guardar, chamar, atalho, this, argumento
| Movimento | Sintaxe | O que você obtém |
|---|---|---|
| guardar | greet: function () { return "Hi"; } |
uma função sentada no objeto |
| chamar | product.greet() |
a função corre e você recebe o resultado |
| atalho | label() { return this.name; } |
a mesma espécie de função, escrita mais curta |
| this | this.name dentro do método |
o objeto que estava antes do ponto |
| argumento | cart.add(3) |
entrada extra só para esta chamada |
Dê nome ao movimento e só então escreva a linha. Guardar não executa a função. O atalho não é um tipo novo de valor. this não é um nome global de produto que você espera existir. Um argumento é entrada desta chamada, não um segundo objeto.
let product = {
name: "Mug",
greet: function () {
return "Hi";
}
};
console.log(typeof product.greet);
O valor pode ser uma função
name guarda uma cadeia. greet guarda uma função. typeof product.greet vale "function". Ainda nada correu, por isso Hi não aparece. O nome da caneca continua ao lado da função.
let product = {
name: "Mug",
greet: function () {
return "Hi";
}
};
console.log(product.greet());
Os parênteses são o botão de arranque
product.greet() entra na função. A consola mostra Hi. Sem os parênteses, você olha para a função, não para o que ela devolve. O ponto diz a qual objeto a chamada pertence.
let product = {
name: "Mug",
label() {
return this.name;
}
};
console.log(product.label());
O atalho só encurta a escrita
Dentro das chaves, label() { ... } põe uma função na chave label. É a mesma espécie de propriedade que greet: function () { ... }, com menos teclas. product.label() executa-a. O corpo lê this.name e a consola mostra Mug.
let product = {
name: "Mug",
price: 8,
tag() {
return this.name + " — " + this.price;
}
};
console.log(product.tag());
Numa chamada simples, this é o objeto antes do ponto
product.tag() quer dizer: executa tag e deixa this ser product. Aí this.name e this.price são os campos dessa caneca. A consola mostra Mug — 8. Um name solto dentro do método é outra procura, não a propriedade. Quando a chamada deixa de ter a forma object.method(), this pode apontar para outro sítio — isso fica para a lição seguinte. Esta página fica na chamada simples.
let cart = {
count: 2,
add(extra) {
this.count = this.count + extra;
return this.count;
}
};
console.log(cart.add(3));
O método recebe dados para esta chamada
add espera extra. cart.add(3) entrega 3, soma-o a count e devolve o total novo. A consola mostra 5. O carrinho fica com esse count já atualizado. O argumento vive na chamada; só vira propriedade se você o guardar.
Escolha o movimento que serve ao trabalho
A função tem de viver no objeto? Guarde-a, forma longa ou curta. Quer o resultado? Chame com (). Quer os campos do próprio objeto? Leia-os por this. Precisa de um número só para esta execução? Passe um argumento. Object.keys listou nomes na página anterior. A seguinte fica com this quando a forma da chamada muda.
Ponha a etiqueta do método na página
Dê ao produto name, price e tag. Escreva product.tag() num parágrafo.
<!DOCTYPE html>
<html>
<head>
<title>object-methods — page</title>
</head>
<body>
<p id="line">…</p>
<script>
let product = {
name: "Mug",
price: 8,
tag() {
return this.name + " — " + this.price;
}
};
let box = document.getElementById("line");
box.textContent = product.tag();
</script>
</body>
</html>
O parágrafo mostra Mug — 8. tag montou essa cadeia com os campos do próprio produto. Mude só name ou price, atualize e leia a linha nova. Lição seguinte: a palavra this — para onde this aponta quando a chamada já não é um object.method() simples.
Passos de prática
- Guarde uma função em
greete mostretypeofdessa propriedade. - Chame
product.greet()e leiaHi. - Escreva
labelcom o atalho e mostreproduct.label(). - Construa
tagpara quethis.nameethis.priceformem uma cadeia. - Comece
countem 2, chameadd(3)e leia5. - Na demonstração HTML mude só
nameouprice, atualize e leia o parágrafo.
Escorregões frequentes
- Mostrar
product.greetsem()e esperarHi - Tratar o atalho
label() {}como propriedade de texto - Escrever
namesolto dentro do método em vez dethis.name - Achar que
cart.add(3)deixacountem 2 - Ir a
Object.keysquando queria chamar um método - Deixar uma função seta como método desta página — a lição seguinte segue
thisquando a forma da chamada muda
Resumo
- Um método é uma função guardada como propriedade
object.method()executa-a e devolve o valor- O atalho
name() {}guarda essa mesma espécie de função - Numa chamada simples,
thisé o objeto antes do ponto - O parâmetro recebe o argumento dessa chamada
- A cadeia do método pode encher uma linha da página
- A seguir: a palavra
this, quando a chamada não éobject.method()
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo