Экземпляр эквивалента для цепей Object.create и прототипов
Рассмотрим такой объект с цепочкой прототипов:
var A = {};
var B = Object.create(A);
var C = Object.create(B);
Как проверить время выполнения, если C имеет A в своей цепочке прототипов?
instanceof
не подходит, поскольку он предназначен для работы с конструкторскими функциями, которые я здесь не использую.
Ответы
Ответ 1
Мой ответ будет коротким...
Вы можете использовать метод isPrototypeOf
, который будет присутствовать в случае, если ваш объект наследуется от прототипа Object, как ваш пример.
пример:
A.isPrototypeOf(C) // true
B.isPrototypeOf(C) // true
Array.prototype.isPrototypeOf(C) // false
Дополнительная информация может быть прочитана здесь: Сеть разработчиков Mozilla: isPrototypeOf
Ответ 2
Вы можете повторить цикл прототипа, вызывая Object.getPrototypeOf
рекурсивно: http://jsfiddle.net/Xdze8/.
function isInPrototypeChain(topMost, itemToSearchFor) {
var p = topMost;
do {
if(p === itemToSearchFor) {
return true;
}
p = Object.getPrototypeOf(p); // prototype of current
} while(p); // while not null (after last chain)
return false; // only get here if the `if` clause was never passed, so not found in chain
}