MoonCheung

MoonCheung

人生路漫漫,何曾有坦途。:)

プロキシの使用方法を理解する

以下のテキストを日本語に翻訳してください:
* Proxy は、特定の操作のデフォルトの動作を変更するために使用されます。ターゲットオブジェクトの前に「インターセプト」レイヤーを設置し、外部からのオブジェクトへのアクセスはすべてこのレイヤーを通過する必要があります。したがって、外部からのアクセスをフィルタリングおよび書き換えるメカニズムを提供します。
* get属性:このメソッドは、特定のプロパティの読み取り操作をインターセプトするために使用されます。3 つのパラメーターを受け入れることができます。順番に、ターゲットオブジェクト、プロパティ名、およびproxyインスタンス自体(オプションのパラメーター)です。
* 存在しないプロパティにアクセスすると、エラーがスローされます。このインターセプト関数が存在しない場合、存在しないプロパティにアクセスするとundefinedが返されます。
* set属性:このメソッドは、特定のプロパティの代入操作をインターセプトするために使用されます。4 つのパラメーターを受け入れることができます。順番に、ターゲットオブジェクト、プロパティ名、プロパティの値、およびproxyインスタンス自体(オプションのパラメーター)です。
* apply属性:このメソッドは、3 つのパラメーターを受け入れることができます。順番に、ターゲットオブジェクト、ターゲットオブジェクトのコンテキストオブジェクト(this)、およびターゲットオブジェクトのパラメーター配列です。
* has属性:このメソッドは、HasProperty 操作をインターセプトするために使用されます。つまり、オブジェクトが特定のプロパティを持っているかどうかを判断する場合、このメソッドが有効になります。また、2 つのパラメーターを受け入れることができます。順番に、ターゲットオブジェクトと検索するプロパティ名です。
* construct属性:このメソッドは、newコマンドをインターセプトするために使用されます。2 つのパラメーターを受け入れることができます。順番に、ターゲットオブジェクトと構築関数のパラメーターオブジェクトです。
* deleteProperty属性:このメソッドは、delete 操作をインターセプトするために使用されます。このメソッドがエラーをスローするか、false を返す場合、現在のプロパティは delete コマンドで削除できなくなります。
* defineProperty属性:このメソッドは、Object.defineProperty 操作をインターセプトします。
* getOwnPropertyDescriptor属性:このメソッドは、Object.getOwnPropertyDescriptor () をインターセプトし、プロパティの記述子オブジェクトまたは undefined を返します。
* getPrototypeOf属性:このメソッドは、オブジェクトのプロトタイプを取得するために主に使用されます。具体的には、次の操作をインターセプトします:
* Object.prototype.__proto__
* Object.prototype.isPrototypeOf()
* Object.getPrototypeOf()
* Reflect.getPrototypeOf()
* instanceof()
* isExtensible属性:このメソッドは、Object.isExtensible 操作をインターセプトします。
* ownKeys属性:このメソッドは、オブジェクトの自身のプロパティの読み取り操作をインターセプトします。具体的には、次の操作をインターセプトします:
* Object.getOwnPropertyNames()
* Object.getOwnPropertySymbols()
* Object.keys()
* for...in...ループ
* preventExtensions属性:このメソッドは、Object.preventExtensions () をインターセプトします。このメソッドは、必ずブール値を返さなければなりません。そうでない場合、自動的にブール値に変換されます。
* setPrototypeOf属性:このメソッドは、主に Object.setPrototypeOf メソッドをインターセプトするために使用されます。
* Proxy.revocable属性:このメソッドは、キャンセル可能な Proxy インスタンスを返します。

// get、setメソッド
let proxy = new Proxy({ },{
  get: function(target, prop){
    console.log('get操作を設定します');
    return target[prop];
  },
  set: function(target, prop, value){
    console.log('set操作を設定します');
    target[prop] = value;
  }
})

proxy.time = 35;  // set操作を設定します 35
console.log(proxy.time);  // get操作を設定します 35

// hasメソッドは、特定のプロパティをin演算子で検出されないように隠します
let handler = {
  has: function(target, key){
    if(key[0] === '_'){
      return false;
    }
    return key in target;
  }
}

let target = {
  _prop: 'foo',
  prop: 'foo'
}

let proxy = new Proxy(target, handler);
console.log('__prop' in proxy) //出力: false;
console.log('prop' in proxy) //出力: true;
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。