推荐答案
-- -------------------- ---- ------- -------- ------------------ ------ - -- -------- ----- -- ------- ---- --- -------- -- ---- --- ----- - ------ ------ - -- -- ---- ----- --- ----- - ---------------------------- ----- ------ - -- ----------- ----- -- ------ --- ----- - ------ ------ - -- ----- ----- ------ ---- -- ------ --- ---------------- - ------ ----- - -- --------- ----- - ----------------------------- - -
本题详细解读
1. 基本思路
myInstanceof
函数的核心思想是通过遍历 left
对象的原型链,检查是否存在与 right.prototype
相等的原型对象。如果找到,则返回 true
,否则返回 false
。
2. 代码解析
基本类型判断:首先判断
left
是否为对象类型,如果不是对象类型或者为null
,则直接返回false
。因为基本类型(如number
,string
,boolean
等)不可能是某个构造函数的实例。原型链遍历:通过
Object.getPrototypeOf(left)
获取left
的原型对象,然后进入一个while
循环,不断向上查找原型链。终止条件:如果遍历到原型链的顶端(即
proto
为null
),则返回false
。如果在遍历过程中找到了与right.prototype
相等的原型对象,则返回true
。
3. 示例
function Person() {} const person = new Person(); console.log(myInstanceof(person, Person)); // true console.log(myInstanceof(person, Object)); // true console.log(myInstanceof(person, Array)); // false
在这个示例中,person
是 Person
的实例,同时也是 Object
的实例,但不是 Array
的实例。