算法 js原型链(链表)

368 阅读1分钟

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、总结一下