Herança em JavaScript com 프로토타입 e 함수

Herança de objetos é um princípio de orientação a objetos e fornece a habilidade de acessar métodos e propriedades de outro objeto (pai) a partir de um objeto derivado (filho). Herança em javascript é possível através do prototype ou seja herança de protótipo.

O javascript disponibiliza a palavra chave class - a palavra-chave class foi introduzida no ES2015, mas é syntax sugar, o JavaScript permanece baseado em prototype - para declarar classes e extends para fazer herança. Nesse post irei는 abordagem function e prototype para detalhar o processo de herança e prototype chain을 사용합니다.

프로토타입 체인(Processo de pesquisa nos prototype)

No javascript quando vamos acessar uma propriedade de um objeto o motor do javascript vai verificar se existe essa propriedade no objeto e caso não encontre i*rá procurar no prototype do objeto* e se também não encontrar irá procurar no prototype do prototype e assim por diante passando por todas as instâncias que foram herdadas até chegar ao último 프로토타입. Caso não encontre o JS irá retornar undefined.

Para acessar as informações do prototype utilizamos__proto__ e com ele podemos acessar informações de outros prototypes acima(mais genéricos).

Vejamos o seguinte example onde temos três objetos em que a classe mais baixa Diretor herda características de Professor e Funcionário:

function Funcionario() {}
Funcionario.prototype.salario = () => 'R$ 10000'

function Professor() {}
Professor.prototype = Object.create(Funcionario.prototype)
Professor.prototype.horaExtra = () => 'R$ 500'

function Diretor() {}
Diretor.prototype = Object.create(Professor.prototype)
Diretor.prototype.bonus = () => 'R$ 2000'


Agora vamos inicializar o objeto Diretor e acessar o método salario() que foi herdado:

const diretor = new Diretor();
console.log(diretor.salario()); //output => 'R$ 10000'


Isso foi possível porque quando chamamos o método salario() o motor do javascript verificou se esse método existia no prototype de Diretor e como não encontrou foi "subindo"passando de prototype em prototype até encontar o metodo no prototype de Funcionario.

Utilize __proto__ e veja a cadeia de prototype (prototype chain) através instância mais baixa que é 감독:

console.log(diretor.__proto__) //output => prototype Diretor
console.log(diretor.__proto__.__proto__) //output => prototype Professor
console.log(diretor.__proto__.__proto__.__proto__) //output => prototype Funcionario



결론

É muito Importante entender bem "herança de protótipo"no javascript para escrever códigos complexos. Evite que sua cadeia de protótipos seja grande e quebre a cadeia caso necessário para evitar problemas de performance.

좋은 웹페이지 즐겨찾기