JavaScript instanceof如何工作_它检查什么?

admin 百科 11
instanceof 检查对象原型链是否包含构造函数的 prototype 对象,基于引用相等向上查找 [[Prototype]],不依赖 constructor 属性;原始值返回 false,null 无原型链,undefined 右侧非函数则报错;可由 Symbol.hasInstance 自定义行为。

JavaScript instanceof如何工作_它检查什么?-第1张图片-佛山资讯网

instanceof 检查的是对象的原型链上是否包含构造函数的 prototype 对象。

它不检查构造函数本身,也不检查对象的 constructor 属性

很多人误以为 instanceof 是看 obj.constructor === Ctor,其实不是。constructor 可以被随意修改,完全不可靠。instanceof 的判断依据只有一条:沿着 obj 的 __proto__(即内部 [[Prototype]])一路向上查找,看能不能找到 Ctor.prototype 这个对象。

  • 如果找到了,返回 true
  • 如果查到原型链尽头(null)都没找到,返回 false
  • 要求右边必须是函数(否则抛错),左边可以是任意值(非对象会直接返回 false)

原型链查找是基于引用相等,不是值相等

instanceof 不关心 Ctor.prototype 上有什么属性或方法,只关心“是不是同一个对象”。哪怕两个函数有完全一样的 prototype 内容,只要不是同一个对象实例,就不会匹配。

例如:

标签: javascript es6 java

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~