javascript复习之旅 2.3 instanceof

本文详细解析了JavaScript中的instanceof运算符,它用于检测构造函数的prototype属性是否存在于实例的原型链上。通过实例和代码示例,阐述了instanceof的工作原理,包括如何沿着对象的__proto__属性查找原型链。此外,还提供了手写实现instanceof的方法,并探讨了其在实际开发中的应用,如在Vue源码中判断实例创建方式。
摘要由CSDN通过智能技术生成

instanceof

start

  • 今天把 instanceof 给终结在这篇文章上,加油。

1. 前置知识

1.1 官方文档文档

MDN 官方说明:

1.2 英文解释:

  • instance:实例
  • of:属于
  • instanceof:实例属于

2. 正文

2.1 概念:

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

  • instanceof:实例属于。
  • 构造函数:可以理解就是一个函数。
  • prototype 属性:函数上一个属性。
  • 原型链:对象可以通过 __proto__ 属性与上游的构造函数的原型对象连接起来,⽽上游的原型对象也有⼀个 __proto__ ,这样就形成了原型链。
2.1.1 举个例子:
function Foo() {}

var a = new Foo()

console.log(a instanceof Foo) // true
console.log(a.__proto__ === Foo.prototype) // true
console.log(a instanceof Object) // true

Foo.prototype
函数上有一个 prototype 属性,叫做这个函数的 原型对象;

a.__proto__
每个对象都有 __proto__ 属性,此属性指向该对象的构造函数的原型对象

2.1.2 个人总结:

看到上述解释的概念,其实可以了解到,instanceof就是沿着对象a__proto__属性,一直向上寻找__proto__
如果 构造函数的原型对象 在这个链条上,返回 true。

2.2 手写一个 instancof

// source instanceof左侧数据
// target instanceof右侧数据

function copyInstanceof(source, target) {
  // 基本数据类型以及 null 直接返回 false
  if (!['function', 'object'].includes(typeof source) || source === null)
    return false

  // getProtypeOf 是 Object 对象自带的一个方法,能够拿到参数的原型对象
  let proto = Object.getPrototypeOf(source)
  while (true) {
    // 查找到尽头,还没找到
    if (proto === null) return false
    // 找到相同的原型对象
    if (proto === target.prototype) return true
    proto = Object.getPrototypeOf(proto)
  }
}

2.3 instanceof 作用

  • instanceof 主要的作用就是判断一个实例是否属于某种类型
  • instanceof 也可以判断一个实例是否是其父类型或者祖先类型的实例。

2.4 实际案例

1. 例如:vue源码中 判断用户是否使用 new 关键词调用的函数

function Vue() {
  if (!(this instanceof Vue)) {

    new throw 'Vue is a constructor and should be called with the `new` keyword'
  }
}

End

  • 完结。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lazy_tomato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值