Le contenu de cet article est une introduction détaillée (exemple de code) sur les agents dans es6. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. aide.
L'agence signifie demander à un agent de faire quelque chose en votre nom, mais contrairement à vous, l'agent peut avoir son propre comportement, et peut même faire des choses qui vont à l'encontre des attentes.
Déclarer une origine d'objet commun, qui a un nom d'attribut
let origin={ name: 'origin' }
Déclarer un objet proxy
let proxy=new Proxy(origin, { get: (target, key)=>target[key]+" from proxy", set: (target, key, value)=>target[key]="set by proxy "+value })
Sortie à ce moment origin
et proxy
, vous pouvez constater que proxy
a le même attribut origin
que name
console.log(origin) // {name: 'origin'} console.log(proxy) // Proxy {name: 'origin'}
ajoute l'attribut origin
à age
, puis affiche les résultats. dessus, vous pouvez trouver, et origin
ont l'attribut proxy
age
origin.age=1 console.log(origin) // {name: 'origin', age: '1'} console.log(proxy) // Proxy {name: 'origin', age '1'}
et nous pouvons trouver cela, bien que proxy
et
proxy.x=1 console.log(origin) // {name: 'origin', age: '1', x:'set by proxy 1'} console.log(proxy) // Proxy {name: 'origin', age '1'}
que nous avons attribué, mais quelques chaînes supplémentaires origin
. , c'est à ce moment-là que l'initialisation proxy
est exécutée. La méthode x
1
du deuxième objet passé, et si nous set by proxy
proxy
set
Il est maintenant clair que get
est le proxy de
console.log(proxy.x) // set by proxy 1 console.log(proxy.x) // set by proxy 1 from proxy
ne seront pas synchronisées avec proxy
, et origin
a son propre comportement. proxy
origin
Vous pouvez y penser de cette façon, origin
est le secrétaire de proxy
Toutes les transactions doivent être soumises au secrétaire. Le secrétaire a ses propres règles pour faire les choses. Il peut les soumettre directement à. le patron, ou il peut refuser de se soumettre, ou ajouter Certaines autres actions sont à nouveau soumises. Alors que peut faire cette secrétaire au nom du patron ? proxy
proxy
Syntaxeorigin
let p = new Proxy(target, handler);
sortes de pièges au total. target
: Définir l'attribut handle
13
Syntaxe :
set
set(target, key, value)
target
: Définir la valeur de l'attribut
Châtaigne :
value
Description :
piège, lorsque nous effectuons l'opération
Quand , il sera capturé. Nous jugeons silet origin={} let proxy=new Proxy(origin,{ set:(target, key, value)=>{ if(value>5)target[key]=value+10000 } }) proxy.x=1 proxy.y=10 console.log(proxy) // Proxy {y: 10010} console.log(origin) // {y: 10010}
S'il n'est pas supérieur à
, nous ne ferons rien, mais s'il est supérieur à set
, nous effectuerons une opération d'affectation. et je l'ai également ajouté set
. Le marron ci-dessus équivaut à un intercepteur. value
5
5
get : attributs d'accès 5
10000
: objet proxy clé : attributs accédés
get(target, key)
Chestnut : target
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ get:(target, key)=>{ if(key==='x')return 'no' return target[key] } }) console.log(proxy.x) // 'no' console.log(proxy.y) // 2
: objet proxy clé : attribut à supprimer
deleteProperty(target, key)
Châtaigne : target
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ deleteProperty:(target, key)=>{ if(key==='x')return delete target[key] } }) delete proxy.x delete proxy.y console.log(proxy) // {x:1}
: objet proxy clé : attribut à juger
has(target, key)
Châtaigne : target
: obtenir lui-même Valeur d'attribut
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ has:(target, key)=>{ if(key==='x')return false return true } }) console.log('x' in proxy) // false console.log('y' in proxy) // true
ownKeys
ownKeys(target)
target
Châtaigne :
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ ownKeys:(target)=>{ return ['y'] } }) console.log(Object.getOwnPropertyNames(proxy)) // ['y']
getPrototypeOf
Syntaxe : prototype
getPrototypeOf(target)
target
Châtaigne
: Paramètres
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ getPrototypeOf:(target)=>{ return null } }) console.log(Object.getPrototypeOf(p)) // null
setPrototypeOf
Syntaxe : prototype
setPrototypeOf(target, prototype)
target
: A définir
prototype
prototype
Châtaigne
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ setPrototypeOf:(target, prototype)=>{ throw 'no' } }) Object.setPrototypeOf(proxy, {}) // Uncaught no
defineProperty
defineProperty(target, prop, descriptor)
target
: Pour définir la propriété de description
prop
: Description
descriptor
Châtaigne
let origin={} let proxy=new Proxy(origin,{ defineProperty:(target, prop, descriptor)=>{ throw 'no' } }) Object.defineProperty(proxy, 'x', {configurable: true}) // Uncaught no
getOwnPropertyDescriptor
getOwnPropertyDescriptor(target, prop)
target
: 代理对象
prop
: 获取描述的属性
栗子
let origin={} let proxy=new Proxy(origin,{ getOwnPropertyDescriptor:(target, prop)=>{ throw 'no' } }) Object.getOwnPropertyDescriptor(proxy, 'x') // Uncaught no
isExtensible
:判断是否可扩展语法:
isExtensible(target)
target
: 代理对象
栗子
let origin={} let proxy=new Proxy(origin,{ isExtensible:(target)=>{ return false } }) console.log(Object.isExtensible(proxy)); // false
preventExtensions
:阻止扩展语法:
preventExtensions(target)
target
: 代理对象
栗子:
let origin={} let proxy=new Proxy(origin,{ preventExtensions:(target)=>{ return false; } }) console.log(Object.preventExtensions(proxy)); // Uncaught TypeError: 'preventExtensions' on proxy: trap returned falsish
construct
:构造语法:
construct(target, argumentsList, newTarget)
target
: 代理对象
argumentsList
: 参数列表
newTarget
: 新对象
栗子:
let Origin=function(){} let OriginProxy=new Proxy(Origin,{ construct: function(target, argumentsList, newTarget) { throw 'error' } }) new OriginProxy() // Uncaught error
apply
:调用语法:
apply(target, thisArg, argumentsList)
target: 代理对象
thisArg: 上下文
argumentsList: 参数列表
栗子:
let origin=function(){} let proxy=new Proxy(origin,{ apply: function(target, thisArg, argumentsList) { throw 'error' } }) origin() // Uncaught error
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!