instanceof手写
要想自己手写instanceof操作符,首先要明白这个在js中怎么使用以及它的原理
function Person() {}
var p = new Person()
p instanceof Person
由上面代码可以,instanceof操作符,左边是一个实例,右边是一个构造函数。它的原理:在这个实例p的整条原型链上,是否有指向Person.prototype这个对象的引用
明白上诉原理我们在注意以下几点就可以手写instanceof操作符了
- 可以通过p.proto.proto ... 这种方式从下往上获取原型对象
- 通过Objec.create(null)的实例是没有原型链
- 有原型链的实例的尽头都是Object
function myInstanceof(a, fn) {
if(!a.__proto__) return false // 排除没有原型链的对象同时规避掉传入的不是对象的情况
if(fn === Object || a.__proto__ === fn.prototype) return true // 一步步对比尽头是Object
return myInstanceof(a.__proto__, fn) // 递归
}