本文共 912 字,大约阅读时间需要 3 分钟。
instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置。 —— MDN
简单理解为:instanceof
可以检测一个实例是否属于某种类型。
function Foo(){ }const a = new Foo()a instanceof Foo // truea instanceof Object // true
还可以在继承关系中用来判断一个实例是否属于它的父类型。
function Foo(){ }function Child(){ }function Other(){ }Child.prototype = new Foo // 继承原型const b = new Child()b instanceof Foo // trueb instanceof Child // trueb instanceof Other // falseb instanceof Object // true
查看对象B的prototype
指向的对象是否在对象A的[[prototype
]]链上。
如果在,则返回true
,如果不在则返回false
。不过有一个特殊的情况,当对象B的prototype
为null
将会报错(类似于空指针异常)。
函数模拟 A instanceof B:
/*** @param obj{Object} 测试对象* @param fun{Function} 构造函数*/function instanceOf(A, B) { let obj = A.__proto__ let fn = B.prototype while (true) { if (obj === null) return false // 这里重点:当 fn 严格等于 obj 时,则返回 true if (fn === obj) return true obj = obj.__proto__ }}
转载地址:http://dsozi.baihongyu.com/