問題タブ [es6-proxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1914 参照

javascript - ES6プロキシセットプロパティトラップが配列の長さで起動しない

JavaScript ES6 プロキシを使用する場合、配列インデックスを直接割り当てると、array.length の set プロパティ トラップが起動しません。

例えば:

Chrome 51 および Firefox 47 の出力:

私が期待している間:

これは仕様ごとですか?これに関する情報は見つかりませんでした。

0 投票する
2 に答える
2714 参照

javascript - 関数プロキシ .toString() エラー

関数プロキシで .toString() を呼び出そうとしています。

関数プロキシを作成して toString を呼び出すだけで「TypeError: Function.prototype.toString is not generic」が発生し、toString を元のソースを返すように設定すると「RangeError: Maximum call stack size exceeded」が発生しますが、toString の get トラップが作成されます。動作します。

toString 関数を設定するだけでは機能しないのに、get トラップを作成すると機能するのはなぜですか?

0 投票する
3 に答える
6900 参照

javascript - プロキシ オブジェクトからプロキシのハンドラを取得するには?

たとえば、このハンドラー/プロキシがある場合 ( MDN の例から)...

オブジェクトpを取り戻すことができる何らかの方法で、プロキシ をプローブすることは可能ですか。handler

次のようなもの:

明らかに、ハンドラーに設定されたさまざまなトラップはプロキシに「認識」されていますが、プロキシ自体からそれら/ハンドラーを返す明確な方法はありますか? もしそうなら、どのように?

現時点では、これに関する特定の使用例はありませんが、既にプロキシを取得した後でハンドラー/トラップを動的に変更したい場合に、これが役立つことがわかります。

0 投票する
2 に答える
1634 参照

javascript - プロキシ オブジェクトを DOM に追加できません (トラップもトリガーされません)

Proxyプロパティをトラップするオブジェクトを作成しようとしていますImageが、空のハンドラーでもエラー メッセージが表示されます。

TypeError: Node.appendChild の引数 1 はインターフェイス Node を実装していません。

プロキシ オブジェクトはターゲット オブジェクトとして機能すると想定されているため、これには少し戸惑います。私が理解している限りでは、 DOM ノードでもこれを行うことができるはずです (?)。

また:画像の読み込みを開始できずonload、プロパティの設定時にハンドラーがトリガーされsrcます。

たとえば「src」プロパティを「引き継ぐ」ことができ、それ以外の場合は通常の画像オブジェクトのように動作させるために、プロキシをどのように使用すればよいですか?

私のコード

更新:@Harangueに感謝します!" new" (bah..) を使用すると、確かにプロキシ オブジェクトが生き返りますが、現在、プロパティの設定をトラップできません。トラップを完全に無視しているようです - 例:

有効なプロキシを使用してプロパティ設定をトラップするにはどうすればよいですか?

Update 2一方new新しいプロキシで使用すると、元のコンストラクターのみが使用されるようです。私が見つけることができるすべての例は new を使用していませ:

その上で thennew myProxy()を使用すると、トラップを無視するため、元のコンストラクターを使用しているように見えますが、これは私が望むものではありません。

トラップは最初の試行では機能しているように見えますが、プロキシは期待どおりに動作しません。これは非常に紛らわしく、非常に新しいものです。これらの両方を解決する方法(トラップと動作)についての入力をお待ちしています。

0 投票する
2 に答える
97 参照

javascript - Proxy get ハンドラで直接アクセスと内部アクセスを区別する

私は配列を持っています:

getハンドラーを使用してその配列のプロキシを作成します。これはn - 1、すべての number の index を持つプロパティを返しますn。たとえば、、–および–p[1]を返します。'a'p[2]'b'p[3]'c'

うまくいっているようです。p[2]、たとえば、必要に応じ'b'て与えます。ただし、別の問題があります。Array.prototype.indexOf()正しく動作しなくなりました。'a'orを渡すと機能'b'します – それぞれ12を返しますが、 を'c'返します-1。これもハンドラーindexOf()をトリガーすることがわかりました。ハンドラーにget追加console.log(property)することにより、次の出力が得られます。getp.indexOf('c')

プロパティをindexOf()内部的にチェックしlength、配列を index0からまで反復しているようlength - 1です。

p[2]プロパティが直接アクセスされるか (のように) 内部的にアクセスされるかを知っていれば、それを修正するのは簡単です。その後、いつでも内部アクセスに戻ることができtarget[property]ました (したがって、プロキシはノーオペレーションになります)。

getProxyハンドラで直接アクセスと内部アクセスを区別する方法は?

私の頭に浮かぶ唯一のことは、エラーをスローし、それをキャッチして、そのスタックを分析することです。それでも、これは実際の解決策というよりは回避策のように思われるので、他に方法がない限り避けたいと思います。

0 投票する
1 に答える
3607 参照

javascript - プロキシコンストラクタとリフレクトの違いは何ですか?

ReflectProxyの間に大きな違いはありますか?

文書化されていることから、次の点を除けば、ほとんど同じ機能を持っているようです。

  • 一度に 1 つのトラップしか指定できないことを反映します。
  • プロキシは取り消し可能です。
  • Proxy はコンストラクターです。

上記のリストがすべての違いを要約している場合、両方を持つ理由は何ですか?

0 投票する
1 に答える
1641 参照

javascript - プロキシ オブジェクトが取り消されているかどうかを確認する

ECMAScript 6 では、取り消し可能として作成できるプロキシ オブジェクトが導入されています。

プロキシが取り消されたかどうかを検出するにはどうすればよいですか?

0 投票する
3 に答える
1109 参照

javascript - JavaScript のカスタム配列のような getter

次のような単純な ES6 クラスがあります。

new Ring(1, 2, 3)[3]Ring オブジェクトのインデックスがラップして、 1 が返され、3 が返されるようにしたいと考えていますnew Ring(1, 2, 3)[-1]。これはES6で可能ですか?もしそうなら、どのように実装しますか?

完全にカスタマイズされたゲッターを許可するプロキシについて読んだことがありますが、プロキシをクラスに適用する方法がわかりません。私はこれを管理しました:

myRingラッピング インデックスをサポートする Ring オブジェクトになりました。問題は、毎回そのように Ring オブジェクトを定義しなければならないことです。new Ring()呼び出しがそれを返すように、このプロキシをクラスに適用する方法はありますか?