instanceof不是根据构造函数进行判断,而是原型链

 instanceof,A instanceof B 判断B.prototype对象能否在A的原型链上找到
function foo(){}
console.log(foo.__proto__); //foo.__proto__为Function.prototype,foo.__proto__.__proto__为Object.prototype
console.log(foo instanceof foo);//false
 
function foo(){
  return [1];
}
var a=new foo();
console.log(a); //[1]
console.log(a instanceof foo);//false
 
function foo(){
  return this;
}
var a=new foo();
console.log(a); //a类型为Object
console.log(a instanceof foo);//true
 
function foo(){
  return foo;
}
var a=new foo();
console.log(a); //a类型为Function
console.log(a instanceof foo);//false

转载于:https://www.cnblogs.com/lee1993/p/6641594.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个类似于`instanceof`函数的功能,可以参考以下步骤: 1. 首先,获取构造函数的显式原型(`right.prototype`)。 2. 然后,获取对象的隐式原型(`left.__proto__`)。 3. 接下来,使用一个循环判断对象的隐式原型是否等于构造函数的显式原型。如果相等,则返回`true`,表示对象是构造函数的实例;如果隐式原型为`null`,则返回`false`,表示对象不是构造函数的实例;如果隐式原型与构造函数的显式原型不相等,则将隐式原型更新为其自身的隐式原型,继续循环判断。 4. 最后,测试函数的实现是否正确,可以尝试使用类似于`console.log(myInstanceof(a, RegExp))`的方式进行验证。 总结起来,实现`instanceof`函数的主要思路是通过比较对象的隐式原型和构造函数的显式原型,来判断对象是否是构造函数的实例。 需要注意的是,以上实现思路是基于JavaScript的内部机制,即通过比较隐式原型是否相等来判断对象的类型。因此,在实际应用中,可以使用该函数来进行类型判断。 参考资料: - 实现instanceof运算符的示例代码 - 众所周知,在JavaScript中,检测一个变量的类型,无疑有以下三种方法。当然,本文会略过前两种,重点讲述instanceof的实现原理和手写instanceof的实现。 - instanceof 运算符用于测试构造函数的 prototype 属性是否出现在对象原型链中的任何位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值