美文网首页
JS:实现一个 instanceof

JS:实现一个 instanceof

作者: limengzhe | 来源:发表于2021-03-30 18:00 被阅读0次

什么是 instanceof ?

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

基本用法

function Car(make, model, year) {
  this.make = make
  this.model = model
  this.year = year
}
const auto = new Car('Honda', 'Accord', 1998)

console.log(auto instanceof Car) // expected output: true
console.log(auto instanceof Object) // expected output: true

其他用法

在 JS 中判断一个变量的类型,常常会用到 typeof 运算符,但 typeof 用来判断引用类型时,会把 null array object 统一归为 object 类型。

// typeof 会把 null array object 统一归为 object 类型
console.log(typeof null) // expected output: object
console.log(typeof [1, 2, 3]) // expected output: object
console.log(typeof { a: 1 }) // expected output: object

此时我们可以使用 instanceof 进行判断。

// 使用 instanceof 判断 Array Object
console.log([1, 2, 3] instanceof Array) // expected output: true
console.log({ a: 1 } instanceof Object) // expected output: true

实现一个 instanceof

// 代码
function _instanceof(L, R) {
  if (typeof L !== 'object') return false

  L = L.__proto__
  R = R.prototype

  while (true) {
    if (L === null) return false

    if (L === R) return true

    L = L.__proto__
  }
}

// 测试
function Car(make, model, year) {
  this.make = make
  this.model = model
  this.year = year
}
const auto = new Car('Honda', 'Accord', 1998)
console.log(_instanceof(auto, Car)) // expected output: true

// 测试
console.log(_instanceof([1, 2], Array)) // expected output: true
console.log(_instanceof({ a: 1 }, Object)) // expected output: true

相关文章

网友评论

      本文标题:JS:实现一个 instanceof

      本文链接:https://www.haomeiwen.com/subject/djyghltx.html