Creo que la mejor manera sería algo como:
var a = {a:1, b:2} var b = Object.create(a); ba = 1 var c = Object.create(b); cc = 3; var d = Object.create(c); d.protoTree(); //returns: [c, b, a] c.protoTree(); //returns: [b, a]; b.protoTree(); //returns: [a];¿Pero es esto posible? ¿Cuál es la mejor manera de asumir que solo conoces el objeto D?
Puede usar isPrototypeOf() para este caso de uso
Si no sería bueno tener eso como un método miembro, pero es fácil de implementar como una función independiente (recursiva):
function protoTree(obj){ if(obj === null) return [] return [obj, ...protoTree(Object.getPrototypeOf(obj))] } Funciona así (tenga en cuenta que también devuelve Object.prototype , del que hereda a .
var a = {a:1, b:2} var b = Object.create(a); ba = 1 var c = Object.create(b); cc = 3; var d = Object.create(c); //Note that `protoTree` returns the prototype objects themselves, not the variable names they are stored in protoTree(d); //returns: [c, b, a, Object.prototype] protoTree(c); //returns: [b, a, Object.prototype] protoTree(b); //returns: [a, Object.prototype] protoTree(a); //returns: [Object.prototype]Usar Object.prototype.isPrototypeOf() es la forma de hacer esto
function Person() {} function Child() {} Child.prototype = Object.create(Person.prototype); const child = new Child(); console.log(Person.prototype.isPrototypeOf(child)); console.log(Child.prototype.isPrototypeOf(child)); Más sobre Object.prototype.isPrototypeOf() aquí