Как узнать количество уровней прототипного наследования объекта?
Нужно написать функцию, которая принимает объект и возвращает количество уровней прототипного наследования этого объекта
Для проверки:
const obj = { a: 1 };
const obj2 = Object.create(obj);
const obj3 = Object.create(obj2);
console.log(layersOfInheritance({})); // 0
console.log(layersOfInheritance(new Date())); // 1
console.log(layersOfInheritance(obj3)); // 2
Можно использовать рекурсию и метод Object getPrototypeOf.
Ответы (2 шт):
Автор решения: ksa
→ Ссылка
Можно использовать рекурсию и метод Object getPrototypeOf.
Предложу такой вариант...
const obj = { a: 1 };
const obj2 = Object.create(obj);
const obj3 = Object.create(obj2);
console.log(layersOfInheritance({})); // 0
console.log(layersOfInheritance(new Date())); // 1
console.log(layersOfInheritance(obj3)); // 2
//
function layersOfInheritance(obj, lv = -1) {
const o = Object.getPrototypeOf(obj)
return o ? layersOfInheritance(o, lv + 1) : lv
}
Автор решения: EzioMercer
→ Ссылка
Можно (и нужно) без рекурсии:
const obj = { a: 1 };
const obj2 = Object.create(obj);
const obj3 = Object.create(obj2);
const layersOfInheritance = (obj) => {
let layersCount = 0;
let prototype = Object.getPrototypeOf(obj);
while (prototype !== null) {
++layersCount;
prototype = Object.getPrototypeOf(prototype);
}
return layersCount - 1;
}
console.log(layersOfInheritance({})); // 0
console.log(layersOfInheritance(new Date())); // 1
console.log(layersOfInheritance(obj3)); // 2
В конце вычитаем единицу, потому что цепочка наследования всегда будет заканчиваться так obj -> ... -> Object -> null, и насколько я понимаю по вашим выходным данным этот последний Object вам не нужен