ES6-プロキシの簡単な紹介(プロキシ)

Javaを学んでいたときに学んだので、魔法のようなことは何も感じませんでした。一般的なメソッドを抽出することでした。たとえば、オブジェクトの特定のプロパティを読み取るときは、空白にする必要があります。これはすべて行う必要があります。時間。これはプロキシを使用して実行できます。もちろん、空の場合は退屈です。これは、データベースへの接続や例外の処理が必要なデータベース操作など、より複雑なビジネスロジックを処理するために使用されます。プロキシの使用を検討できます

シンプルな

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"

es6での属性読み取りのインターセプトに加えて、プロキシでサポートされているインターセプト操作には、合計13種類の12種類があります。

  • 取得(ターゲット、propKey、レシーバ):のようなオブジェクトプロパティの読み取り切片proxy.fooproxy['foo']
  • set(target、propKey、value、receiver)proxy.foo = vまたはなどのオブジェクトプロパティの設定をインターセプトしproxy['foo'] = v、ブール値を返します。
  • has(target、propKey):インターセプトされたpropKey in proxy操作はブール値を返します。
  • deleteProperty(target、propKey):インターセプトされたdelete proxy[propKey]操作はブール値を返します。
  • ownKeys(ターゲット):傍受Object.getOwnPropertyNames(proxy)Object.getOwnPropertySymbols(proxy)Object.keys(proxy)for...inサイクルは、配列を返します。このメソッドは、ターゲットオブジェクトのすべての独自の属性の属性名を返します。返されるObject.keys()結果には、ターゲットオブジェクト自体のトラバース可能な属性のみが含まれます。
  • getOwnPropertyDescriptor(target、propKey)Object.getOwnPropertyDescriptor(proxy, propKey)プロパティの説明オブジェクトをインターセプトして返します。
  • defineProperty(target、propKey、propDesc):切片Object.defineProperty(proxy, propKey, propDesc)Object.defineProperties(proxy, propDescs)およびブール値を返します。
  • PreventExtensions(target)Object.preventExtensions(proxy)ブール値をインターセプトして返します。
  • getPrototypeOf(target)Object.getPrototypeOf(proxy)オブジェクトをインターセプトして返します。
  • isExtensible(target)Object.isExtensible(proxy)ブール値をインターセプトして返します。
  • setPrototypeOf(target、proto)Object.setPrototypeOf(proxy, proto)ブール値をインターセプトして返します。ターゲットオブジェクトが関数の場合、インターセプトできる2つの追加操作があります。
  • (ターゲット、オブジェクト、引数)適用、例えば、関数呼び出しを傍受するようにプロキシインスタンスを:proxy(...args)proxy.call(object, ...args)proxy.apply(...)
  • construct(target、args):プロキシインスタンスによってコンストラクタとして呼び出される操作のインターセプトnew proxy(...args)たとえば

おすすめ

転載: blog.csdn.net/qq_38238041/article/details/89105367