1、原型链介绍
当然 我们举例子说明一下 这个情况
// 沿着原型链向上 查找
const obj = {} // 自身是空对象
Object.prototype.x = 'x' // 原型链上设置 x值
const func = function () {} // 自身是空函数
Function.prototype.y = 'y' //原型链上设置 y值
console.log(obj.x) // x
console.log(func.x) // x
console.log(func.y) // y
这样就显得比较明确了
2、面试问题
代码实现一波,非常简单 容易理解
// 实现 instanceOf
const instanceOf = function (A, B) {
let p = A; // 设置一个指针指向 A
while (p) {
p = p.__proto__; //原型链向下 寻找的表达
if (p === B.prototype) {
return true
}
}
return false
}
简单测试一下 结果 (写完不测试是大佬)
- 再来一个原型链的题目
var foo = {}
var F = function () {}
Object.prototype.a = 'value a'
Function.prototype.b = 'value b'
console.log(foo.a) // 'value a'
console.log(foo.b) // undefined
console.log(F.a) // 'value a'
console.log(F.b) // 'value b'
3、用链表指针获取json节点
如何拿到指定位置的json 数据呢 ? 来,上代码 是不是很简单 但是在工作中常使用哦 需要注意
// 和json打交道的场景
const json = {
a: {
b: {
c: {
d: 1
}
}
},
e: {
f: 2
}
}
// 比如 设置一条路径 a-->b-->c-->d
const path = ['a', 'b', 'c', 'd']
let p = json // 设置一个指针 指向 json数据本身
path.forEach(k => { // forEach无返回值 或者是undefined
p = p[k]; // 指针向下一个属性移动
})
console.log(p) // 可以拿到 结果为 1
4、总结一下