1.jsinstanceof 原理及显示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// a instanceof b 官方解释为检查构造函数b的prototype 有没有出现在a的原型链上。
function copyInstanceof(source, target) {
// 基本数据类型以及null直接返回null
if (!['function', 'object'].includes(typeof source) || source === null) return false
// getProtypeOf 是 Object 对象自带的一个方法,能获取某个实例对象的原型
let proto = Object.getPrototypeOf(source)
while (true) {
if (proto === null) return false
if (proto === target.prototype) return true
proto = Object.getPrototypeOf(proto)
}
}
// isPrototypeOf:检测某一个对象是否存在于另一个对象的原型链上
function isInstanceOf(source, target) {
return target.prototypeis.isPrototypeOf(source)
}
console.log(copyInstanceof("111", String)); // false
console.log(copyInstanceof(new String("111"), String)); // true
console.log(copyInstanceof(Date, Function)); // true
console.log(copyInstanceof(null, Object)); // false
</script>
</body>
</html>