JS中Symbol.hasInstance属性的传参机制疑问
关于
Symbol.hasInstance的参数传递与工作机制解释 核心调用规则
当你执行a1 instanceof Animal这类表达式时,JavaScript引擎会自动触发以下操作:
直接调用Animal[Symbol.hasInstance](a1)——instanceof左侧的对象a1会被引擎自动传入Symbol.hasInstance方法的obj参数位置,全程不需要手动传参,是底层引擎帮你完成的参数绑定。
结合你的代码拆解
- 第一次执行
console.log(a1 instanceof Animal)时:
刚创建的a1没有isAnimal属性,自定义的Symbol.hasInstance里的if(obj.isAnimal)条件不成立,函数默认返回undefined,JS会将undefined判定为false,所以输出false。 - 给
a1.isAnimal = true后再次调用:
此时传入obj参数的a1满足isAnimal: true的条件,函数返回true,因此输出true。
额外补充
默认情况下,Symbol.hasInstance的逻辑是检查左侧对象的原型链中是否存在右侧构造函数的prototype属性。当你自定义这个静态方法后,会完全覆盖原生instanceof的判断逻辑,改用你自己定义的规则。
内容的提问来源于stack exchange,提问作者user19591368
相关产品推荐
相关产品推荐

