Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Rex

Uso de prototype

Recommended Posts

Estou lendo sobre prototype e gostaria de saber se estou entendendo corretamente.

 

Código 1

 

function Person(name){
     this.name = name;


     this.display = function(){
         alert(this.name);
     }
}

 

Código 2

 

function Person(name){
     this.name = name;
}


Person.prototype.display = function(){
     alert(this.name);
}

 

No código 1, foi usado 'this' para criar um novo método na classe. Já no Código 2, usou-se o prototype. A diferença entre esses dois códigos seria que: se uma classe herdar a classe do código 1, ela tbm herdaria o método display(). Agora se uma classe herdasse a classe do código 2, ela já não herdaria o método display(), pois foi adicionado na classe via prototype.

 

É isso?

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pelo que eu sei prototype serve para adicionar propriedades em um objeto já existente, ou seja, no código 2, ele cria o objeto, e depois adiciona o método display através do prototype.

 

Quando você está criando um objeto, você deve usar o this para especificar a qual objeto a propriedade esta sendo definida.

 

Quando você usa o prototype para adicionar uma propriedade em um objeto em existente, você já está chamando ele, então não precisa especificar com o this.

 

No seu ex:

 

Person.prototype ..

 

Ou seja já está bem claro em que objeto a novo propriedade vai ser criada, por isso, não precisa usar o this.

 

Uma nova classe herdaria sim, pois a nova propriedade já estaria definida no Objeto Person, através do prototype

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

foi usado 'this' para criar um novo método na classe.

Não existe classes no javascript, logo é incorreto dizer isso. O this, como o proprio nome diz "ESTE", é uma auto-referência ao próprio contexto em que se encontra, no caso, o objeto Person.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom... agradeco a ajuda, porem, a pergunta nao foi respondida. No codigo 2, o uso do prototype significa que um objeto que herda person, nao twria o metodo display?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Não existe classe em javascript, apenas objetos.

 

Segundo o MDN:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/prototype#Examples

 

Tradução Livre:

 

"... o prototype é uma solução útil para fazer um objeto "classe base" de determinadas funções que atuam como objetos."

 

Por exemplo:

var Employee = function(name, title) {
    this.name = name;
    this.title = title;
    this.greet = function() {
        if (this.canTalk) {
            console.log("Hi, I'm "+this.name+", the "+this.title);
        }
    }
}

var Customer = function(name) {
    this.name = name;
}
var Mime = function(name) {
    this.name = name;
    this.canTalk = false;
}

var Person = {
    canTalk : true,
    greet : function() {
        if (this.canTalk) {
            console.log("Hi, I'm "+this.name)
        }
    }
}
Customer.prototype = Person;
Employee.prototype = Person;
Mime.prototype = Person;

var bob = new Employee('Bob','Builder');
var joe = new Customer('Joe');
var rg = new Employee('Red Green','Handyman');
var mike = new Customer('Mike');
var mime = new Mime('Mime');
bob.greet();
joe.greet();
rg.greet();
mike.greet();
mime.greet();

Este código produzirá a seguinte saída:

 

Hi, I'm Bob, the Builder
Hi, I'm Joe
Hi, I'm Red Green, the Handyman
Hi, I'm Mike

 

Espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, obrigado pela contribuição, era exatamente o ponto que eu estava em dúvida. Até achei que eu estava querendo saber de algo muito além do meu limitado conhecimento de js no momento... mas o tutorial no seu site esclareceu a minha dúvida, obrigado.

 

Obrigado a todos que contribuíram com suas respostas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.