以下のテキストを日本語に翻訳してください:
* 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;