什么是 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
网友评论