Вы хотите построить цепочки прототипов.
Итак, допустим, ваша цепочка наследования
foo -> bar -> moo.
Тогда у вас есть объект Foo
это ваш прототип для узлов foo.
Вы можете создать Bar
объект, просто вставив Foo
в его цепочку прототипов.
var Bar = Object.create(Foo, props)
Теперь у нас есть Bar
прототип, который является прототипом для стержневых узлов.
Затем вы делаете то же самое для Moo
var Moo = Object.create(Bar, props)
Теперь, скажем, выесть узел Му.
Тогда вы можете просто взять любую собственность, которую вы знаете.Давайте назовем его «prop1» и напишем простую функцию, которая дает вам объект, которому принадлежит свойствосообщая вам, что это за объект, вы можете захотеть добавить свойство "name"
ко всем объектам-прототипам вашего узла, чтобы вам было легче проверять, что это такое.
Возможно, вы также захотите, чтобы findPropertyOwner
возвращал кортеж (obj, count)
следующим образом
var findPropertyOwner = function(obj, prop) {
var i = 0;
do {
if (obj.hasOwnProperty(prop)) {
return [obj, i];
}
} while (i++, obj = Object.getPrototypeOf(obj));
}
Таким образом, вы получите больше информации, например, как далеко в цепочке прототипов было найдено это свойство.,Также обратите внимание, что когда цикл do / while завершается (Object.getPrototypeOf(Object.prototype) === null
), он возвращает undefined