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