EdwardZZZ / articles

工作点滴记录
2 stars 0 forks source link

调用函数,不确定函数是否存在 callMissingMethod #22

Open EdwardZZZ opened 7 years ago

EdwardZZZ commented 7 years ago

1、将函数名做参数名传递到代理函数中,代理函数去判断函数是否存在

2、

module.exports = function (object, missingMethod) {
  const proxyObject = new Proxy(object, {
    get(object, property) {
      if (Reflect.has(object, property)) {
        return Reflect.get(object, property);
      } else {
        return (...args) => Reflect.apply(missingMethod, proxyObject, [property, ...args]);
      }
    }
  });
  return proxyObject;
}
EdwardZZZ commented 4 years ago
const obj = {
    a: 123,
    b: {
        c: 456
    }
}

const newObj = new Proxy(obj, {
    get(object, property) {
        if (Reflect.has(object, property)) {
            return Reflect.get(object, property);
        }

        console.log('unkown property', property);
    }
});

console.log(newObj.a);
console.log(newObj.b);
console.log(newObj.b.c);
console.log(newObj.b.d);