Compreendendo o protótipo de javascript e os processos de cadeia de protótipo

O protótipo deve ser definido antes da instância da classe para ver o método na classe

function Teacher(){
this.teaching = "I'm teaching you javascript";
this.surname = "Ivanovic";
return this;
}
Teacher.prototype = {};
Teacher.prototype.getName = function(){
return this.name + " " + this.surname;
}
function Person(){
this.name = "Igor";
return this;
}
Person.prototype = new Teacher();
var person = new Person();
var teacher = new Teacher();

Person (). Constructor.toString () – função Window () {[código nativo]}
Person não é chamado com “novo” keyward e person se torna um objeto de janela global porque estamos retornando isso na função Person e propriedade ensino e sobrenome não são visível no objeto janela global

person instanceof Person – true,
person instanceof Professor – true,
person instanceof Object – true

Se um objeto herda propriedades de mais de um protótipo e tem mais de um objeto em sua “cadeia de protótipo”, então as propriedades de cada objeto protótipo no cadeia são enumerados na ordem de criação antes de enumerar as propriedades do próximo objeto

person.constructor === Object – true,
person.constructor === Person – false,
person.constructor === Professor – false

person.constructor é objeto porque está encadeado a partir de teacher.prototype witch é definido como Object

person.teaching – Estou ensinando javascript person.getName () – Igor Ivanovic
Construído protótipo de pessoa é construído Professor e as propriedades do Professor são visíveis porque Person.prototype é novo Professor ()
Se Person.prototype = Professor.protótipo teacher.surname será não será visível porque Person.prototype = Professor.protótipo cria uma cópia local do protótipo do Professor

professor instância de Pessoa – falso,
professor instância de Professor – verdadeiro,
professor instância de Objeto – verdadeiro

Professor não é instância de Pessoa que é verdadeiro porque o protótipo do professor é Objeto

teacher.constructor === Object – true,
teacher.constructor === Person – false,
teacher.constructor === Teacher – false O

construtor do professor é objeto porque Teacher.prototype é objeto

function NonChainedPerson(){
this.name = "Igor";
this.surname = "Ivanovic";
return this;
}

NonchainedPerson.prototype.getName = function(){
return this.name + " " + this.surname;
}

nonchained.constructor.toString () – função NonchainedPerson () {this.name = “Igor”; this.surname = “Ivanovic”; devolva isso; }
Neste exemplo, o construtor retorna a string do objeto local que é NonchainedPerson porque o protótipo não é herdado

instância não-encadeada de Pessoa –
instância não-encadeada falsa de Professor – instância falsa não-
encadeada de Objeto –
instância verdadeira não- encadeada de NonchainedPerson –
instância verdadeira
é NonchainedPerson

nonchained.constructor === Object – false
nonchained.constructor === Person – false
nonchained.constructor === Professor – false
nonchained.constructor === NonchainedPerson – true O

construtor é NonchainedPerson

nonchained.getName () – Igor Ivanovic
Retorna as propriedades de nome e sobrenome na chamada do método getName com o comportamento esperado