实现一个函数 myInstanceof(left, right),判断 left 是否是 right 的实例

推荐答案

-- -------------------- ---- -------
-------- ------------------ ------ -
    -- -------- -----
    -- ------- ---- --- -------- -- ---- --- ----- -
        ------ ------
    -

    -- -- ---- -----
    --- ----- - ----------------------------

    ----- ------ -
        -- ----------- -----
        -- ------ --- ----- -
            ------ ------
        -

        -- ----- ----- ------ ----
        -- ------ --- ---------------- -
            ------ -----
        -

        -- ---------
        ----- - -----------------------------
    -
-

本题详细解读

1. 基本思路

myInstanceof 函数的核心思想是通过遍历 left 对象的原型链,检查是否存在与 right.prototype 相等的原型对象。如果找到,则返回 true,否则返回 false

2. 代码解析

  • 基本类型判断:首先判断 left 是否为对象类型,如果不是对象类型或者为 null,则直接返回 false。因为基本类型(如 number, string, boolean 等)不可能是某个构造函数的实例。

  • 原型链遍历:通过 Object.getPrototypeOf(left) 获取 left 的原型对象,然后进入一个 while 循环,不断向上查找原型链。

  • 终止条件:如果遍历到原型链的顶端(即 protonull),则返回 false。如果在遍历过程中找到了与 right.prototype 相等的原型对象,则返回 true

3. 示例

在这个示例中,personPerson 的实例,同时也是 Object 的实例,但不是 Array 的实例。

纠错
反馈