Object.create和prototype链的等效实例

时间:2011-12-09 17:26:21

标签: javascript instanceof object-create

考虑这样一个带有原型链的对象:

var A = {};
var B = Object.create(A);
var C = Object.create(B);

如果C在其原型链中有A,如何检查运行时?

instanceof不适合用于构造函数,我在这里没有使用它。

2 个答案:

答案 0 :(得分:22)

我的答案很短......

您可以使用isPrototypeOf方法,如果您的对象继承自Object原型,则会出现该方法,就像您的示例一样。

示例:

A.isPrototypeOf(C) // true
B.isPrototypeOf(C) // true
Array.prototype.isPrototypeOf(C) // false

可在此处阅读更多信息:Mozilla Developer Network: isPrototypeOf

答案 1 :(得分:4)

您可以通过递归调用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
}