Estou praticando um pouco e me deparei com este problema. Neste script tenho duas funções (account e savingsAccount) gerando objetos distintos que representam dois tipos de contas diferentes em um banco. Ambas funções têm as mesmas propriedades, com uma única diferença: a forma com que o método deposit é implementado. Como savingsAccount herda as propriedades e métodos de account, eu sobrescrevi o método deposit usando prototype, segue o código:
'use strict';
function account(name) {
this.name = name;
this.balance = 0;
this.deposit = function (value) {
(value > 0) ? this.balance += 5 + value : false;
}
}
function savingsAccount(name) {
account.call(this, name);
}
savingsAccount.prototype.deposit = function(value) {
(value > 0) ? this.balance = value : false;
}
const joao = new savingsAccount('João');
joao.deposit(5); // retorna 10, 5 era o esperado
Como visto acima, o resultado esperado era 5 porém ele retorna 10, ou seja, o objeto está usando o método deposit de account e não o que foi definido no prototype de savingsAccount. Alguém pode me explicar o por quê? Propriedades herdadas não podem ser sobrescritas?