問題タブ [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 - プロキシ インデックスが文字列に変換される
新しいProxy オブジェクトを試してみると、プロキシが設定されるとキーが自動的に文字列に変換されることに驚きました。
数値を渡しているので、それはtypeof key
になると思います。number
ただし、何らかの形で内部で文字列に変換されProxy
、実際に警告されるタイプはstring
. 問題を示す小さな JSFiddle をここで見ることができます。arr
プロキシを通過した後でも配列のままです。
では、文字列と数値を渡すこととどのように区別できますか? のように正規表現でき/\d+/.test(key)
ますが、これらの状況を区別せず、ハックのように感じます。
javascript - DOM API 関数の呼び出しを傍受する
一部の DOM API 関数の呼び出しをインターセプトし、それらの引数を副作用として保存する必要があります。たとえば、関数getElementsByTagName
とに興味があるとしgetElementById
ます。以下の例を参照してください。
1 つの重要な注意点は、私はnode.jsを使用しており、document
オブジェクトはjsdomライブラリによって実装されているということです。これまでのところ、ES6 Proxies を利用して、前述の DOM 関数の動作を変更しようとしました。
これが、すべてのメソッド呼び出しをトラップするためにドキュメントオブジェクトをプロキシしようとした方法です。この手法または他の手法を使用して、問題を解決できるかどうか、またどのように使用できるか疑問に思います。
typescript - プロキシを使用する型に型パラメーターのメソッドを追加する方法
内部で使用する単純な RPC クライアント/サーバー ライブラリを開発しています。1 つのインターフェイスを使用してクライアントとサーバーの両方を記述し、ユニバーサル アプリケーションでサーバーとブラウザー間でそれらを共有できるようにします。
サーバーは簡単です。サービスは単に Service クラスを拡張し、API を記述するインターフェースを実装するだけです。
クライアントは ES6 プロキシとして実装され、すべてのメソッド呼び出しをサーバーに送信するだけです。サービス クラスと同様に厳密に型指定したいと考えています。タイプ ServiceClient のインスタンスが、それが何であるかに関係なく、そのタイプ パラメータのすべてのメソッドとプロパティを持つ必要があります。
私はこの構文について考えていました:
同様に機能するいくつかのタイピングを参照しようとしましたが、方法が見つかりませんでした. ご協力ありがとうございました。
javascript - 任意の関数の汎用ハンドラーを作成する
オブジェクトの任意の関数の汎用ハンドラーを作成したい:
obj に関数が定義されていません (= {} です)。どうにかして、obj のプロパティを呼び出すと、ハンドラーが呼び出されるようにしたいと考えています。
javascript - Array.prototype.forEach() が get ハンドラーを使用してプロキシで呼び出されたときに機能しない
次のプロキシがあります。
length
これは、数値プロパティと要素の量を指定するプロパティを持っているため、配列のようなオブジェクトです。for...of
ループを使用して反復できます。
ただし、このforEach()
方法は機能していません。
このコードは何も記録しません。コールバック関数は呼び出されません。なぜ機能しないのですか?どうすれば修正できますか?
コードスニペット:
javascript - ES6 プロキシを使用して Object.hasOwnProperty をトラップする
ES6 プロキシを使用して、次の一般的なコードをトラップしたいと考えています。
しかし、プロキシのドキュメントを確認した後、主にhas
トラップ トラップがin
オペレーター用であり、上記のコードでは使用されていないようであり、操作用のトラップがないため、その方法がわかりませんhasOwnProperty
。
javascript - Proxy によって作成されたオブジェクトのプロパティを削除するには?
コードと同様に、削除操作は効果がありません。
MDNで削除演算子を読みました。
delete 演算子は、オブジェクトから特定のプロパティを削除します。削除が成功すると true が返され、それ以外の場合は false が返されます。ただし、次のシナリオを考慮することが重要です。
削除しようとしているプロパティが存在しない場合、delete は効果がなく、true を返します。
オブジェクトのプロトタイプ チェーンに同じ名前のプロパティが存在する場合、削除後、オブジェクトはプロトタイプ チェーンのプロパティを使用します (つまり、削除は自身のプロパティにのみ影響します)。
var で宣言されたプロパティは、グローバル スコープまたは関数のスコープから削除できません。
そのため、delete はグローバル スコープ内の関数を削除できません (これが関数定義または関数式の一部であるかどうかに関係なく)。
オブジェクトの一部である関数 (グローバル スコープを除く) は、delete で削除できます。
let または const で宣言されたプロパティは、それらが定義されたスコープから削除できません。
構成不可能なプロパティは削除できません。これには、Math、Array、Object などの組み込みオブジェクトのプロパティと、Object.defineProperty() などのメソッドで構成不可能として作成されるプロパティが含まれます。
私のコードは上記のものに属していないと思うので、どう説明すればいいですか? ありがとう。
javascript - ES6プロキシのhandler.set戻り値
このコードでは
2 つの質問があります。
- 最後の行でプロパティのステータスを 0 または ""(空の文字列) に設定すると、エラーが発生するのはなぜですか?
キャッチされていない TypeError: 'set' on proxy: トラップがプロパティ 'status' に対して false を返しました(…)
- 仕様では、ブール値を返す必要があると書かれています。しかし、私の場合、 set() メソッドではブール値を返しません。その場合、なぜこのコードは機能するのでしょうか?
javascript - Proxy を使用して動的な構成不可能なプロパティを作成する
Proxy を使用して動的な構成不可能なプロパティを作成したいと考えています。私はこれを試しました:
しかし、私はエラーが発生しています:
TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property 'test' which is either non-existant or configurable in the proxy target
MDNは次のように述べています。
プロパティがターゲット オブジェクトの独自のプロパティとして存在しない場合、またはターゲット オブジェクトの構成可能な独自のプロパティとして存在する場合、そのプロパティは構成不可として報告できません。
しかし、この背後にある理由については説明していません。
このエラーの回避策はありますか?