SOURCE

let isFirst = true;

function noop() { }

let proxyVoid = get(undefined);

function get(obj) {

    if (obj === undefined) {

        if (!isFirst) {

            return proxyVoid;

        }

        isFirst = false;

    }

    // 注意这里拦截的是 noop 函数

    return new Proxy(noop, {

        // 这里支持返回执行的时候传入的参数

        apply(target, context, [arg]) {

            return obj === undefined ? arg : obj;

        },

        get(target, prop) {

            if (

                obj !== undefined &&

                obj !== null &&

                obj.hasOwnProperty(prop)

            ) {

                return get(obj[prop]);

            }

            return proxyVoid;

        }

    })

}

// this.get = get;

// const b = get(a)
// console.log(b.a.c.s)
// b.a.c.s // undefined
// b.a.c.bc = 1 // 不会报错
console 命令行工具 X clear

                    
>
console