Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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.
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?
Bom dia,
Não existe classe em javascript, apenas objetos.
Segundo o MDN:
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.
é exatamente o contrário do que vc disse. Leia:
http://wbruno.com.br/javascript-puro/orientacao-a-objetos-em-javascript-funcao-construtora/
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.
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