Object.create 和原型链的 Instanceof 等效项

发布于 2024-12-20 05:52:20 字数 209 浏览 2 评论 0原文

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

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

如何在运行时检查 C 的原型链中是否有 A?

instanceof 不适合,因为它被设计为与构造函数一起使用,而我在这里没有使用它。

Consider such an object with a prototype chain:

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

How to check in runtime if C has A in its prototype chain?

instanceof doesn't fit as it's designed to work with constructor functions, which I'm not using here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

べ繥欢鉨o。 2024-12-27 05:52:20

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

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

示例:

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

更多信息可以在此处阅读: Mozilla 开发者网络: isPrototypeOf

My answer will be short…

You could use the isPrototypeOf method, which will be present in case your object inherits from the Object prototype, like your example.

example:

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

More info can be read here: Mozilla Developer Network: isPrototypeOf

无名指的心愿 2024-12-27 05:52:20

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

You could iterate back through the prototype chain by calling Object.getPrototypeOf recursively: 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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文