この記事では、es6 のエージェントについて詳しく説明します (コード例)。必要な方は参考にしてください。 。
概要
エージェンシーとは、あなたに代わって何かをするようエージェントに依頼することを意味しますが、あなた自身とは異なり、エージェントには独自の行動があり、エージェントの期待に反する行動を行うこともあります。 。
Chestnut
属性名を持つ共通オブジェクトの原点を宣言します
let origin={ name: 'origin' }
プロキシ オブジェクトを宣言します
let proxy=new Proxy(origin, { get: (target, key)=>target[key]+" from proxy", set: (target, key, value)=>target[key]="set by proxy "+value })
今回の出力origin
と proxy
では、proxy
が origin
<pre class="brush:php;toolbar:false">console.log(origin) // {name: 'origin'}
console.log(proxy) // Proxy {name: 'origin'}</pre>
と同じ
属性を持っていることがわかります。 origin
age
属性を追加して出力すると、origin
と proxy
の両方に age# があることがわかります。 ##attribute
origin.age=1 console.log(origin) // {name: 'origin', age: '1'} console.log(proxy) // Proxy {name: 'origin', age '1'}それはプロキシですか? もちろんそうではありません。
proxy
proxy.x=1 console.log(origin) // {name: 'origin', age: '1', x:'set by proxy 1'} console.log(proxy) // Proxy {name: 'origin', age '1'}に属性を追加しようとすると、
origin# であることがわかります。 ## と proxy
これらはすべて x
属性を持っていますが、これは私たちが割り当てた 1
ではなく、プロキシ ## によって設定されたさらにいくつかの文字列です。 # 明らかに、これは proxy
の初期化時に渡される 2 番目のオブジェクトの
set メソッドが実行されます。 ## はクリアになりました。
proxy は
origin
のプロキシです。proxy
上のすべての操作は
に同期され、# については同期されます。 ##origin の操作は
proxy に同期されず、
proxy にも独自の動作があります。
これを次のように考えることができます。
proxy は
origin の秘書です。秘書には独自のルールがあります。それらを上司に直接送信することもできますが、送信を拒否したり、送信する前に他の動作を追加したりすることもできます。では、この秘書は上司に代わって何ができるのでしょうか?
トラップ
console.log(proxy.x) // set by proxy 1 console.log(proxy.x) // set by proxy 1 from proxy
プロキシの初期化には 2 つのパラメータが必要です
target: プロキシ ターゲット#handle
: 私たちの作戦は、逃走する動物のようなものです。もしハンターがすべての逃げ道に罠を仕掛けたら、私たちは必ず一緒に落ちてしまいます。本質はオブジェクトであり、キーは操作を記述し、値は関数であり、動作を記述します。合計
13のトラップがあります。
0x003 set
:属性の設定
構文: <pre class="brush:php;toolbar:false">let p = new Proxy(target, handler);</pre>
target
: プロキシ オブジェクト
key:属性の設定
value: 属性値の設定
チェストナット:<pre class="brush:php;toolbar:false">set(target, key, value)</pre>
説明:
set を
の上に配置しました。トラップ。set 操作を実行すると、
value
5
より大きいかどうか、または 5# より大きいかどうかを判断します。 ##何もしませんが、##5
より大きい場合は代入演算を実行し、##10000 を加算します。上の栗がインターセプターに相当します。
get: アクセス属性
構文:
let 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}
target: プロキシ オブジェクト
key: アクセスプロパティ
栗:
get(target, key)deleteProperty: プロパティの削除 構文:
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
target: プロキシobjectkey: 削除する属性Chestnut:
deleteProperty(target, key)has: 特定の属性が含まれるかどうかを決定します構文:
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}
target: プロキシオブジェクトkey: 判定対象の属性Chestnut:
has(target, key)ownKeys : 独自の属性値を取得します
構文:
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
##target
: プロキシ オブジェクト- 栗:
-
ownKeys(target)
- :
prototype
# を取得します ##構文:
- getPrototypeOf
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ ownKeys:(target)=>{ return ['y'] } }) console.log(Object.getOwnPropertyNames(proxy)) // ['y']
: プロキシ オブジェクト
ChestnutgetPrototypeOf(target)
- :
- prototype
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ getPrototypeOf:(target)=>{ return null } }) console.log(Object.getPrototypeOf(p)) // null
: プロキシ オブジェクト
prototype- : 対象となる
- prototype
Chestnut
<pre class="brush:php;toolbar:false">setPrototypeOf(target, prototype)</pre>
- defineProperty
: プロパティの説明を設定します
構文 :
let origin={ x:1, y:2 } let proxy=new Proxy(origin,{ setPrototypeOf:(target, prototype)=>{ throw 'no' } }) Object.setPrototypeOf(proxy, {}) // Uncaught no
- target : プロキシ オブジェクト
- : To説明を設定します。 プロパティ
- : 説明
-
defineProperty(target, prop, descriptor)
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(target)
target
: 代理对象-
栗子
let origin={} let proxy=new Proxy(origin,{ isExtensible:(target)=>{ return false } }) console.log(Object.isExtensible(proxy)); // false
-
语法:
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(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(target, thisArg, argumentsList)
target: 代理对象
thisArg: 上下文
argumentsList: 参数列表
-
栗子:
let origin=function(){} let proxy=new Proxy(origin,{ apply: function(target, thisArg, argumentsList) { throw 'error' } }) origin() // Uncaught error
- descriptor
isExtensible
:判断是否可扩展
preventExtensions
:阻止扩展
construct
:构造
apply
:调用
以上がes6 のプロキシの詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

在es6中,可以利用“Array.isArray()”方法判断对象是否为数组,若判断的对象是数组,返回的结果是true,若判断对象不是数组,返回的结果是false,语法为“Array.isArray(需要检测的js对象)”。

es6中遍历跟迭代的区别是:遍历强调的是要把整个数据依次全部取出来,是访问数据结构的所有元素;而迭代虽然也是依次取出数据,但是并不保证取多少,也不保证把所有的数据取完,是遍历的一种形式。

在es6中,可用Object对象的is()方法来判断两个对象是否相等,该方法检测两个变量的值是否为同一个值,判断两个对象的引用地址是否一致,语法“Object.is(对象1,对象2)”;该方法会返回布尔值,若返回true则表示两个对象相等。

转换方法:1、利用“+”给数字拼接一个空字符,语法“数字+""”;2、使用String(),可把对象的值转换为字符串,语法“String(数字对象)”;3、用toString(),可返回数字的字符串表示,语法“数字.toString()”。

在es6中,assign用于对象的合并,可以将源对象的所有可枚举属性复制到目标对象;若目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性,语法为“Object.assign(...)”

改变方法:1、利用splice()方法修改,该方法可以直接修改原数组的内容,语法为“数组.splice(开始位置,修改个数,修改后的值)”;2、利用下标访问数组元素,并重新赋值来修改数组数据,语法为“数组[下标值]=修改后的值;”。

sort排序是es6中的;sort排序是es6中用于对数组的元素进行排序的方法,该方法默认不传参,按照字符编码顺序进行排序,排序顺序可以是字母或数字,并按升序或降序,语法为“array.sort(callback(a,b))”。

在es6中,import as用于将若干export导出的内容组合成一个对象返回;ES6的模块化分为导出与导入两个模块,该方法能够将所有的导出内容包裹到指定对象中,语法为“import * as 对象 from ...”。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
