ES6-Una breve introducción al proxy (Proxy)

Lo aprendí cuando estaba aprendiendo Java, así que no sentí nada mágico. Fue extraer un método común. Por ejemplo, al leer una determinada propiedad en un objeto, debe estar en blanco. Debes hacer esto cada tiempo. Esto se puede hacer usando un proxy. Por supuesto, si está vacío, es aburrido. Esto se usa para lidiar con una lógica comercial más compleja, como operaciones de base de datos que necesitan conectarse a la base de datos o manejar excepciones. Puedes considerar usar un proxy

Un simple

let person = {
  name: "barry"
};

// Proxy对象,第一个参数为被代理的对象,第二个参数事要代理什么
// 这里的get是拦截对象属性读取
let proxy = new Proxy(person, {
  get: function(target, property) {
    if(target[property]) {
      return target[property];
    }else {
      throw new ReferenceError('Property \"' + property + '\" does not exist.');
    }
  }
})

console.log(proxy.name);

// 如果没有拦截,这里返回的事undefined
console.log(proxy.age);


"barry"
"error"
"ReferenceError: Property \"age\" does not exist.
    at Object.get (hajowoqafe.js:14:13)
    at hajowoqafe.js:20:44
    at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:13924
    at https://static.jsbin.com/js/prod/runner-4.1.7.min.js:1:10866"

Además de la lectura de atributos de interceptación en es6, existen otros 12 tipos de operaciones de interceptación compatibles con Proxy, un total de 13 tipos.

  • get (target, propKey, receiver) : intercepta la lectura de las propiedades del objeto, como proxy.fooy proxy['foo'].
  • set (target, propKey, value, receiver) : intercepta la configuración de las propiedades del objeto, como proxy.foo = vo proxy['foo'] = v, devuelve un valor booleano.
  • has (target, propKey) : la propKey in proxyoperación interceptada devuelve un valor booleano.
  • deleteProperty (target, propKey) : la delete proxy[propKey]operación interceptada devuelve un valor booleano.
  • ownKeys (objetivo) : interceptación Object.getOwnPropertyNames(proxy), Object.getOwnPropertySymbols(proxy), Object.keys(proxy), for...inciclo, devuelve una matriz. Este método devuelve los nombres de atributo de todos sus propios atributos del objeto de destino, y Object.keys()el resultado devuelto solo incluye los atributos transitables del objeto de destino en sí.
  • getOwnPropertyDescriptor (target, propKey) : intercepta Object.getOwnPropertyDescriptor(proxy, propKey)y devuelve el objeto de descripción de la propiedad.
  • defineProperty (objetivo, propKey, propDesc) : intercepción Object.defineProperty(proxy, propKey, propDesc), Object.defineProperties(proxy, propDescs)y devuelve un valor booleano.
  • preventExtensions (objetivo) : intercepta Object.preventExtensions(proxy)y devuelve un valor booleano.
  • getPrototypeOf (target) : intercepta Object.getPrototypeOf(proxy)y devuelve un objeto.
  • isExtensible (objetivo) : intercepta Object.isExtensible(proxy)y devuelve un valor booleano.
  • setPrototypeOf (target, proto) : intercepta Object.setPrototypeOf(proxy, proto)y devuelve un valor booleano. Si el objeto de destino es una función, hay dos operaciones adicionales que se pueden interceptar.
  • Aplicar (objetivo, objeto, args) : instancia del proxy como la interceptación de una llamada de función, por ejemplo proxy(...args), proxy.call(object, ...args), proxy.apply(...).
  • construct (target, args) : interceptación de operaciones llamadas por la instancia de Proxy como constructor, por ejemplo new proxy(...args).

Supongo que te gusta

Origin blog.csdn.net/qq_38238041/article/details/89105367
Recomendado
Clasificación