本文主要是介绍【JavaScript】如何模拟一个instanceof,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先看一下instanceof的用法。
a instanceof B 判断的是,a是否为B的实例,即a的原型链上是否存在B的构造函数。
function Person(name) {this.name = name
}
const p = new Person('mike')p instanceof Person // true
这里的 p 是 Person 构造出来的实例对象。
p.__proto__ === Person.prototype // true
同时,顺着 p 的原型链也能找到 Object 的构造函数。
p.__proto__.__proto__ === Object.prototype // true
这里暂且停顿一下,
好好回味一下“顺着~原型链 找 构造函数”这句话,
真正理解后对我们模拟instanceof的实现很有帮助。
const instanceofMock = (L, R) => {if (typeof L !== 'object') {// 注意:基本类型不是构造函数构造出来的实例对象// 5 instanceof Number 结果为false// new Number(5) instanceof Number 结果为truereturn false}while (true) {if (L === null) {// 已经遍历到了顶端还是没找到return false}if (R.prototype === L.__proto__) {return true}// 找不到就继续顺着原型链往上找L = L.__proto__}
}
instanceofMock('', String) // false
instanceofMock(new String(''), String) // truefunction Person(name) {this.name = name
}
const p = new Person('mike')instanceofMock(p, Person) // true
这篇关于【JavaScript】如何模拟一个instanceof的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!