Skip to content

Instantly share code, notes, and snippets.

@felipeblini
Last active November 4, 2016 05:00
Show Gist options
  • Save felipeblini/a0b363c88a5261520d56c5c12ff267da to your computer and use it in GitHub Desktop.
Save felipeblini/a0b363c88a5261520d56c5c12ff267da to your computer and use it in GitHub Desktop.
// criando a superclasse Natureza
function Natureza(nome, cor) {
this.nome = nome;
this.cor = cor;
};
// Adicionando comportamntos em seu objeto prototype
Natureza.prototype.nascer = function () {
console.log(this.nome + ' ' + this.cor + ' nascendo...');
}
Natureza.prototype.crescer = function () {
console.log(this.nome + ' ' + this.cor + ' crescendo...');
}
Natureza.prototype.morrer = function () {
console.log(this.nome + ' ' + this.cor + ' morrendo...');
}
// checando o protótipo de Natureza
console.log('Protótipo de Natureza', Natureza.prototype);
/* "Protótipo de Natureza"
[object Object] { -> Percebe-se que Natureza herda todos métodos de Object adicionando seus próprios metodos abaixo:
crescer: function () {
window.runnerWindow.proxyConsole.log(this.nome + ' ' + this.cor + ' crescendo...');
},
morrer: function () {
window.runnerWindow.proxyConsole.log(this.nome + ' ' + this.cor + ' morrendo...');
},
nascer: function () {
window.runnerWindow.proxyConsole.log(this.nome + ' ' + this.cor + ' nascendo...');
}
}*/
// criando a subclasse Fruta
function Fruta(nome, cor, temSemente) {
// chamando o construtor da superclasse e passando
// o objeto atual como contexto
Natureza.call(this, nome, cor);
this.temSemente = temSemente;
};
// checando o protótipo de Fruta
console.log('Protótipo de Fruta', Fruta.prototype);
// como esperado o protótipo de Fruta é Object
// "Protótipo de Fruta" [object Object] {
// extendendo Fruta
Fruta.prototype = Natureza.prototype;
// adicionando um método específico para frutas
Fruta.prototype.temSemente = function() {
console.log(this.temSemente);
}
// checando novamente o protótipo de Fruta
console.log('Novo Protótipo de Fruta', Fruta.prototype);
/* Fruta agora tem todos os métodos de Object, de Natureza e o seu método específico temSemente()
"Novo Protótipo de Fruta"
[object Object] {
crescer: function () {
window.runnerWindow.proxyConsole.log(this.nome + ' ' + this.cor + ' crescendo...');
},
morrer: function () {
window.runnerWindow.proxyConsole.log(this.nome + ' ' + this.cor + ' morrendo...');
},
nascer: function () {
window.runnerWindow.proxyConsole.log(this.nome + ' ' + this.cor + ' nascendo...');
},
temSemente: function () {
window.runnerWindow.proxyConsole.log(this.temSemente);
}
} */
var uva = new Fruta("uva", "roxa", true);
var morango = new Fruta("morango", "vermelho", false);
uva.nascer(); // "uva roxa nascendo..."
morango.nascer(); // "morango vermelho nascendo..."
uva.crescer(); // "uva roxa crescendo..."
morango.crescer(); // "morango vermelho crescendo..."
uva.morrer(); // "uva roxa morrendo..."
morango.morrer(); // "morango vermelho morrendo..."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment