前言
最近在看一些JavaScript的手写代码,近期可能会时不时的放出来混经验,还望大家多多关照,让我在掘(mo)金(yu)大佬的路上更进一步。
这次放出来的是手写一个instanceOf,如果抄的不好,烦请见谅。
两种实现方式
const myInstanceof = (target, origin) => {
while (target) {
if (target.__proto__ === origin.prototype) {
return true
}
target = target.__proto__
}
return false
}
// 来源:阿冲
function myInstanceof(left, right) {
//基本数据类型直接返回false
if(typeof left !== 'object' || left === null) return false;
//getProtypeOf是Object对象自带的一个方法,能够拿到参数的原型对象
let proto = Object.getPrototypeOf(left);
while(true) {
//查找到尽头,还没找到
if(proto == null) return false;
//找到相同的原型对象
if(proto == right.prototype) return true;
proto = Object.getPrototypeOf(proto);
}
}
// 来源:掘金-神三元
总结下
function myInstanceof(target, origin) {
// 非object直接返回false
if(typeof target !== 'object' || target === null) return false;
var proto = Object.getPrototypeOf(target);
while (proto) {
if (proto === origin.prototype) {
return true
}
proto = Object.getPrototypeOf(proto);
}
return false
}
我感觉还是
while (proto)
看起来比较舒服点。 如果有其他意见,emm...我不要你觉得,我要我觉得!
原始值的instanceof
class PrimitiveString {
static [Symbol.hasInstance](x) {
return typeof x === 'string'
}
}
const primitive = trye => {
return class {
static [Symbol.hasInstance](value) {
return typeof value === trye
}
}
}
const primitiveString = primitive('string')
const primitiveNumber = primitive('number')
console.log('123' instanceof primitiveString)
console.log(123 instanceof primitiveNumber)
最近想写点东西,却又不知道写啥,每天在群里看别人问题、出题、解题,感觉自己就是个混子,希望可以混成掘(mo)金(yu)大佬。
博客原文地址:xiaoranzife.com/guide/jichu…