検索
ホームページウェブフロントエンドjsチュートリアルes6 のプロキシの詳細な紹介 (コード例)

この記事では、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 では、proxyorigin <pre class="brush:php;toolbar:false">console.log(origin) // {name: 'origin'} console.log(proxy) // Proxy {name: 'origin'}</pre> と同じ

name

属性を持っていることがわかります。 originage 属性を追加して出力すると、originproxy の両方に 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 メソッドが実行されます。 ## はクリアになりました。proxyorigin
のプロキシです。proxy 上のすべての操作は

origin

に同期され、# については同期されます。 ##origin の操作は proxy に同期されず、proxy にも独自の動作があります。 これを次のように考えることができます。proxyorigin の秘書です。秘書には独自のルールがあります。それらを上司に直接送信することもできますが、送信を拒否したり、送信する前に他の動作を追加したりすることもできます。では、この秘書は上司に代わって何ができるのでしょうか? トラップ

構文

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: プロキシobject

key: 削除する属性

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)

    • getPrototypeOf
    • :

      prototype

      # を取得します
    • ##構文:
let origin={
    x:1,
    y:2
}
let proxy=new Proxy(origin,{
    ownKeys:(target)=>{
        return ['y']
    }
})
console.log(Object.getOwnPropertyNames(proxy)) // ['y']
  • target

    : プロキシ オブジェクト

    Chestnut
      getPrototypeOf(target)
    • setPrototypeOf
      • prototype

      • 構文:
      let origin={
          x:1,
          y:2
      }
      let proxy=new Proxy(origin,{
          getPrototypeOf:(target)=>{
              return null
          }
      })
      console.log(Object.getPrototypeOf(p)) // null
    • target

      : プロキシ オブジェクト

      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
      • : プロキシ オブジェクト

      prop
        : To説明を設定します。 プロパティ
        • descriptor
        • : 説明

        • Chestnut
        • 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:判断是否可扩展

        • 语法:

          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



      以上がes6 のプロキシの詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

      声明
      この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
      JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

      はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

      JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

      JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

      CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

      CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

      Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

      JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

      Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

      Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

      JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

      CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

      JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

      現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

      JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

      Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

      See all articles

      ホットAIツール

      Undresser.AI Undress

      Undresser.AI Undress

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

      AI Clothes Remover

      AI Clothes Remover

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

      Undress AI Tool

      Undress AI Tool

      脱衣画像を無料で

      Clothoff.io

      Clothoff.io

      AI衣類リムーバー

      Video Face Swap

      Video Face Swap

      完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

      ホットツール

      SublimeText3 Mac版

      SublimeText3 Mac版

      神レベルのコード編集ソフト(SublimeText3)

      mPDF

      mPDF

      mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

      SAP NetWeaver Server Adapter for Eclipse

      SAP NetWeaver Server Adapter for Eclipse

      Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

      SublimeText3 Linux 新バージョン

      SublimeText3 Linux 新バージョン

      SublimeText3 Linux 最新バージョン

      EditPlus 中国語クラック版

      EditPlus 中国語クラック版

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