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