Skip to content

Instantly share code, notes, and snippets.

@gtkatakura
Last active August 8, 2016 16:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gtkatakura/e286135812f083687532a39b5179b289 to your computer and use it in GitHub Desktop.
Save gtkatakura/e286135812f083687532a39b5179b289 to your computer and use it in GitHub Desktop.
console.log('Conta');
class Conta {
constructor() {
this.saldo = 0;
}
deposita(valor) {
this.saldo += valor;
}
}
class ContaPoupanca extends Conta {
atualiza(indice) {
this.saldo += this.saldo * indice;
}
}
console.log(new Conta().deposita == new Conta().deposita); // true
var conta1 = new Conta();
Conta.prototype.deposita = function() {
return 1;
};
var conta2 = new Conta();
console.log(conta1.deposita()); // 1
console.log(conta2.deposita()); // 1
console.log(new ContaPoupanca().constructor == ContaPoupanca); // true
console.log(new ContaPoupanca().constructor == Conta); // false
// Modelo ES5 não compatível
console.log('ContaES5');
function ContaES5() {
this.saldo = 0;
this.deposita = function(valor) {
this.saldo += valor;
};
}
function ContaPoupancaES5() {
//não preciso copiar de Conta...
this.atualiza = function(indice) {
this.saldo += this.saldo * indice;
};
}
console.log(new ContaES5().deposita == new ContaES5().deposita); // false
var conta1 = new ContaES5();
ContaES5.prototype.deposita = function() {
return 1;
};
var conta2 = new ContaES5();
var conta3 = new ContaES5();
conta3.deposita = function() {
return 1;
};
console.log(conta1.deposita()); // undefined
console.log(conta2.deposita()); // undefined
console.log(conta3.deposita()); // 1
console.log(new ContaPoupancaES5().constructor == ContaPoupancaES5); // false
console.log(new ContaPoupancaES5().constructor == ContaES5); // true
// Modelo ES5 compatível
console.log('ContaOK');
function ContaOK() {}
Object.assign(ContaOK.prototype, {
saldo: 0,
deposita: function(valor) {
this.saldo += valor;
}
});
function inherit(child, parent, members) {
return Object.assign(Object.create(parent.prototype), members, {
constructor: child
});
}
function ContaPoupancaOK() {}
inherit(ContaPoupancaOK, ContaOK, {
atualiza: function(indice) {
this.saldo += this.saldo * indice;
}
});
console.log(new ContaOK().deposita == new ContaOK().deposita); // true
var conta1 = new ContaOK();
ContaOK.prototype.deposita = function() {
return 1;
};
var conta2 = new ContaOK();
console.log(conta1.deposita()); // 1
console.log(conta2.deposita()); // 1
console.log(new ContaPoupancaOK().constructor == ContaPoupancaOK); // true
console.log(new ContaPoupancaOK().constructor == ContaOK); // false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment