//Cadeia de protótipos (prototype chain)
Object.prototype.atr0 = 'Z'
const avo = {atr1: "A"}
const pai = {__proto__: avo, atr2: 'B'}
const filho = {__proto__: pai, atr3: 'C'}
console.log(filho.atr1);//procura no atributo atr1 o protótipo de filho
console.log(filho.atrX);//indefinido = null
console.log(filho.atr0);//procura em objeto do atributo atr0 
console.log(filho.atr0, filho.atr1, filho.atr2, filho.atr3);
console.log(pai.atr3);//nulo
const teste = {__proto__: avo, atr2:'K', atr3: 'Y'}
console.log(filho.atr0, filho.atr1, filho.atr2, filho.atr3);
const carro = {
    velAtual: 0,
    veloMax: 200,
    aceleraMais(delta){
        if(this.velAtual + delta <= this.veloMax){
            this.velAtual += delta
        }else{
            this.velAtual = this.veloMax
        }
    },
    status(){
        return `${this.velAtual} Km/h de ${this.veloMax}`
    }
}
const ferrari = {
    modelo: 'F50',
    velMax: 324//shadowing (sombreamento)
}
const volvo = {
    modelo: 'V40 vue',
    status(){
        return `${this.modelo}: ${super.status()}`
    }
}
//1° Objeto , 2° um protótipo
Object.setPrototypeOf(ferrari, carro)//ferrari tem carro como protótipo
Object.setPrototypeOf(volvo, carro)
console.log(ferrari,'\n');
console.log(volvo,'\n');
volvo.aceleraMais(100)
console.log(volvo.status(),'\n');
ferrari.aceleraMais(300)
console.log(ferrari.status());

Nenhum comentário:
Postar um comentário