問題タブ [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.
javascript - ES6プロキシセットプロパティトラップが配列の長さで起動しない
JavaScript ES6 プロキシを使用する場合、配列インデックスを直接割り当てると、array.length の set プロパティ トラップが起動しません。
例えば:
Chrome 51 および Firefox 47 の出力:
私が期待している間:
これは仕様ごとですか?これに関する情報は見つかりませんでした。
javascript - 関数プロキシ .toString() エラー
関数プロキシで .toString() を呼び出そうとしています。
関数プロキシを作成して toString を呼び出すだけで「TypeError: Function.prototype.toString is not generic」が発生し、toString を元のソースを返すように設定すると「RangeError: Maximum call stack size exceeded」が発生しますが、toString の get トラップが作成されます。動作します。
toString 関数を設定するだけでは機能しないのに、get トラップを作成すると機能するのはなぜですか?
javascript - プロキシ オブジェクトからプロキシのハンドラを取得するには?
たとえば、このハンドラー/プロキシがある場合 ( MDN の例から)...
オブジェクトp
を取り戻すことができる何らかの方法で、プロキシ をプローブすることは可能ですか。handler
次のようなもの:
明らかに、ハンドラーに設定されたさまざまなトラップはプロキシに「認識」されていますが、プロキシ自体からそれら/ハンドラーを返す明確な方法はありますか? もしそうなら、どのように?
現時点では、これに関する特定の使用例はありませんが、既にプロキシを取得した後でハンドラー/トラップを動的に変更したい場合に、これが役立つことがわかります。
javascript - プロキシ オブジェクトを DOM に追加できません (トラップもトリガーされません)
Proxy
プロパティをトラップするオブジェクトを作成しようとしていますImage
が、空のハンドラーでもエラー メッセージが表示されます。
TypeError: Node.appendChild の引数 1 はインターフェイス Node を実装していません。
プロキシ オブジェクトはターゲット オブジェクトとして機能すると想定されているため、これには少し戸惑います。私が理解している限りでは、 DOM ノードでもこれを行うことができるはずです (?)。
また:画像の読み込みを開始できずonload
、プロパティの設定時にハンドラーがトリガーされsrc
ます。
たとえば「src」プロパティを「引き継ぐ」ことができ、それ以外の場合は通常の画像オブジェクトのように動作させるために、プロキシをどのように使用すればよいですか?
私のコード
更新:@Harangueに感謝します!" 現在、プロパティの設定をトラップできません。トラップを完全に無視しているようです - 例:new
" (bah..) を使用すると、確かにプロキシ オブジェクトが生き返りますが、
有効なプロキシを使用してプロパティ設定をトラップするにはどうすればよいですか?
Update 2一方new
、新しいプロキシで使用すると、元のコンストラクターのみが使用されるようです。私が見つけることができるすべての例は new を使用していません:
その上で thennew myProxy()
を使用すると、トラップを無視するため、元のコンストラクターを使用しているように見えますが、これは私が望むものではありません。
トラップは最初の試行では機能しているように見えますが、プロキシは期待どおりに動作しません。これは非常に紛らわしく、非常に新しいものです。これらの両方を解決する方法(トラップと動作)についての入力をお待ちしています。
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'
します – それぞれ1
と2
を返しますが、 を'c'
返します-1
。これもハンドラーindexOf()
をトリガーすることがわかりました。ハンドラーにget
追加console.log(property)
することにより、次の出力が得られます。get
p.indexOf('c')
プロパティをindexOf()
内部的にチェックしlength
、配列を index0
からまで反復しているようlength - 1
です。
p[2]
プロパティが直接アクセスされるか (のように) 内部的にアクセスされるかを知っていれば、それを修正するのは簡単です。その後、いつでも内部アクセスに戻ることができtarget[property]
ました (したがって、プロキシはノーオペレーションになります)。
get
Proxyハンドラで直接アクセスと内部アクセスを区別する方法は?
私の頭に浮かぶ唯一のことは、エラーをスローし、それをキャッチして、そのスタックを分析することです。それでも、これは実際の解決策というよりは回避策のように思われるので、他に方法がない限り避けたいと思います。
javascript - プロキシ オブジェクトが取り消されているかどうかを確認する
ECMAScript 6 では、取り消し可能として作成できるプロキシ オブジェクトが導入されています。
プロキシが取り消されたかどうかを検出するにはどうすればよいですか?
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()
呼び出しがそれを返すように、このプロキシをクラスに適用する方法はありますか?