2017-04-23 6 views
3

最近私はES6プロキシについて知りましたが、それを使用する正当な理由はありません。つまり、何かが欠落している場合を除いて、プロキシを使用して行うことができるものはすべて、それなしで行うことができます。ES6プロキシの主な使用例

たとえば、プロキシについてはほとんどの人が検証について語りますが、検証するにはJSの良さを適用することができ、誰もが問題ありません。私は誰かがプロキシの主要な使用事例に目を向けることができれば感謝します。ありがとう!リモートで真実ではない私は、1プロキシで行うことができることをすべてのものは、それなしで行うことができることを意味

答えて

9

...

は存在しないプロパティへのアクセスをキャッチするための一般的な必要性を考えてみましょう:

const o = {foo: "bar"}; 
console.log(o.blarg); 

それはundefinedをログに記録するデフォルト以外の方法でそれを処理するのが一般的です。プロキシを使用すると、get trapを介してその操作を行うことができます。例:

const o = {foo: "bar"}; 
 
const p = new Proxy(o, { 
 
    get(target, prop, receiver) { 
 
    return prop in target ? target[prop] : "nifty!"; 
 
    } 
 
}); 
 
console.log(p.foo); 
 
console.log(p.blarg);

別の例は、オブジェクトのプロパティのリストを取得する各種の動作をフックする能力です。プロキシなしでそれに接続する方法はありません。 プロキシは簡単です。フックする内容に応じてhas trapまたはownKeys trapを使用します。

他の使用例に関しては、プロキシはFacadeパターンを実装するための究極のツールです。 Facadeのユースケースを探してください。プロキシの使用例が見つかります。

+1

私はここに何が欠けているのかはっきりと分かります。ファサードが大いに役立った。ありがとう! –

1

プロキシが動的プログラミングのクラスを表す(dynamic languagesのように、ないmethod of problem solving)がmetaprogrammingと呼ばれ、絶対にプロキシを用いて行うことができる何がそれらなしで行うことができるとは限りません。実際にはこれが実際にプロキシが存在する理由です。これまで不可能だった全く新しい機能を有効にすることです。

プロキシを使用すると、純粋にJavaScriptエンジンの役割を果たしていたオブジェクトに対する操作を傍受することができます。プロパティへのアクセスと変更は、2つの明白な例です。

T.J.の回答は、プロキシなしでは実行できないことの良い例です。もう一つは、オブジェクトを指している参照に影響を与えることなく、バッキングデータストアをスワップアウトして完全に新しいオブジェクトに置き換えることができるようにするために、プロキシを使用しています。

プロキシなしでこれを行うには、オブジェクトの各フィールドを反復処理し、新しいオブジェクトの新しいフィールドにスワップアウトする必要があります。真のJavaScriptはそれを可能にするほどダイナミックであるが、プロキシーはそれをはるかにエレガントな方法で解決することを可能にする。プロキシの隠れたバッキングストアは単に新しいオブジェクトに置き換えられ、将来のすべてのプロパティへのアクセスは古いものではなく新しいバッキングストアですが、オブジェクト(実際にはプロキシです)への外部参照は賢明である必要はありません。それらには同じオブジェクト(あたかもそうであるため)であるかのように見えますが、今ではそれとはまったく異なるデータがあります。

これは、プロキシを使用できる例の1つです。彼らはいかに動的であるかのために本当に非常に強力です。私はちょうどそれらを知るようになっていますが、すでに私はかなり恋愛していると言うことができます。 :)

2

あなたが実際にそれでできることはたくさんあります。この男がチェックアウトできるプロキシリソースの束をまとめた、すばらしいギターのレポ。

https://github.com/mikaelbr/proxy-fun

はまた、私の要旨をチェックアウト、私は最近、プロキシで遊んで始めた、と私はかなりユニークであるカップルの例を持っています。プロキシとプログラムを使って自分の考えるDSLに近づけることができます。

https://gist.github.com/jasuperior

関連する問題