js中如何实现一个instanceof功能
instanceof
实际上是基于原型链查找,它用于检测构造函数的prototype
属性是否出现在某个实例对象的原型链。
MDN相关介绍:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/instanceof
比如检测一个元素是否为数组
[] instanceof Array;
打印结果为true
。这是因为[].__proto__
指向的是Array.prototype
,正好符合概念中所描述的那样(实例对象可以通过原型链指向构造函数的原型)。
然而像字符串这种比较特殊,'hello' instanceof String
打印的结果为false
,需要使用new String('hello') instanceof String
形式才会打印出true
。
基于这种原理,通过不断循环向上查找原型,可以实现一个类似instanceof
功能的函数。
function instanceOf(source, target) {
if (typeof source !== "object" || source === null) return false;
let proto = Object.getPrototypeOf(source);
while (true) {
if (proto === null) return false;
if (proto === target.prototype) return true;
proto = Object.getPrototypeOf(proto);
}
}
对于基本类型,还是推荐使用typeof
来进行类型判断,instanceof
并不是最佳的方案。
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=2439