instanceof

75 阅读1分钟

概念描述

  • obj instanceof constructor
  • obj.__ proto __ 的构造函数是否是 constructor。
  • 是的话返回true, 不是的话沿着原型链继续往上找,直接找到为止,找不到返回false。

代码实现

001-prototype.jpg

/**
* @description: instanceof
* @author: huen2015
*/

![001-prototype.jpg](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7907000573954aa0a5d477d0489a1313~tplv-k3u1fbpfcp-watermark.image?)
export function instanceOf(obj: object, Fn: Function): boolean {
    if (typeof obj !== 'object') return false

    let result: boolean = false
    let proto = Reflect.getPrototypeOf(obj)

    while (proto) {
        if (proto.constructor === Fn) {
            result = true
            break
        } else {
            proto = Reflect.getPrototypeOf(proto)
        }
    }

    return result
}

console.log('instanceOf([], Array)', instanceOf([], Array))
console.log('instanceOf([], Object)', instanceOf([], Object))
console.log('instanceOf([], Date)', instanceOf([], Date))

代码演示仓库