問題タブ [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 に答える
1019 参照

javascript - プロキシ インデックスが文字列に変換される

新しいProxy オブジェクトを試してみると、プロキシが設定されるとキーが自動的に文字列に変換されることに驚きました。

数値を渡しているので、それはtypeof keyになると思います。numberただし、何らかの形で内部で文字列に変換されProxy、実際に警告されるタイプはstring. 問題を示す小さな JSFiddle をここで見ることができます。arrプロキシを通過した後でも配列のままです。

では、文字列と数値を渡すこととどのように区別できますか? のように正規表現でき/\d+/.test(key)ますが、これらの状況を区別せず、ハックのように感じます。

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

javascript - DOM API 関数の呼び出しを傍受する

一部の DOM API 関数の呼び出しをインターセプトし、それらの引数を副作用として保存する必要があります。たとえば、関数getElementsByTagNameとに興味があるとしgetElementByIdます。以下の例を参照してください。

1 つの重要な注意点は、私はnode.jsを使用しており、documentオブジェクトはjsdomライブラリによって実装されているということです。これまでのところ、ES6 Proxies を利用して、前述の DOM 関数の動作を変更しようとしました。

これが、すべてのメソッド呼び出しをトラップするためにドキュメントオブジェクトをプロキシしようとした方法です。この手法または他の手法を使用して、問題を解決できるかどうか、またどのように使用できるか疑問に思います。

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

typescript - プロキシを使用する型に型パラメーターのメソッドを追加する方法

内部で使用する単純な RPC クライアント/サーバー ライブラリを開発しています。1 つのインターフェイスを使用してクライアントとサーバーの両方を記述し、ユニバーサル アプリケーションでサーバーとブラウザー間でそれらを共有できるようにします。

サーバーは簡単です。サービスは単に Service クラスを拡張し、API を記述するインターフェースを実装するだけです。

クライアントは ES6 プロキシとして実装され、すべてのメソッド呼び出しをサーバーに送信するだけです。サービス クラスと同様に厳密に型指定したいと考えています。タイプ ServiceClient のインスタンスが、それが何であるかに関係なく、そのタイプ パラメータのすべてのメソッドとプロパティを持つ必要があります。

私はこの構文について考えていました:

同様に機能するいくつかのタイピングを参照しようとしましたが、方法が見つかりませんでした. ご協力ありがとうございました。

0 投票する
0 に答える
28 参照

javascript - 任意の関数の汎用ハンドラーを作成する

オブジェクトの任意の関数の汎用ハンドラーを作成したい:

obj に関数が定義されていません (= {} です)。どうにかして、obj のプロパティを呼び出すと、ハンドラーが呼び出されるようにしたいと考えています。

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

javascript - Array.prototype.forEach() が get ハンドラーを使用してプロキシで呼び出されたときに機能しない

次のプロキシがあります。

lengthこれは、数値プロパティと要素の量を指定するプロパティを持っているため、配列のようなオブジェクトです。for...ofループを使用して反復できます。

ただし、このforEach()方法は機能していません。

このコードは何も記録しません。コールバック関数は呼び出されません。なぜ機能しないのですか?どうすれば修正できますか?

コードスニペット:

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

javascript - ES6 プロキシを使用して Object.hasOwnProperty をトラップする

ES6 プロキシを使用して、次の一般的なコードをトラップしたいと考えています。

しかし、プロキシのドキュメントを確認した後、主にhasトラップ トラップがinオペレーター用であり、上記のコードでは使用されていないようであり、操作用のトラップがないため、その方法がわかりませんhasOwnProperty

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

javascript - Proxy によって作成されたオブジェクトのプロパティを削除するには?

コードと同様に、削除操作は効果がありません。

MDNで削除演算子を読みました。

delete 演算子は、オブジェクトから特定のプロパティを削除します。削除が成功すると true が返され、それ以外の場合は false が返されます。ただし、次のシナリオを考慮することが重要です。

  • 削除しようとしているプロパティが存在しない場合、delete は効果がなく、true を返します。

  • オブジェクトのプロトタイプ チェーンに同じ名前のプロパティが存在する場合、削除後、オブジェクトはプロトタイプ チェーンのプロパティを使用します (つまり、削除は自身のプロパティにのみ影響します)。

  • var で宣言されたプロパティは、グローバル スコープまたは関数のスコープから削除できません。

    • そのため、delete はグローバル スコープ内の関数を削除できません (これが関数定義または関数式の一部であるかどうかに関係なく)。

    • オブジェクトの一部である関数 (グローバル スコープを除く) は、delete で削除できます。

  • let または const で宣言されたプロパティは、それらが定義されたスコープから削除できません。

  • 構成不可能なプロパティは削除できません。これには、Math、Array、Object などの組み込みオブジェクトのプロパティと、Object.defineProperty() などのメソッドで構成不可能として作成されるプロパティが含まれます。

私のコードは上記のものに属していないと思うので、どう説明すればいいですか? ありがとう。

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

javascript - ES6プロキシのhandler.set戻り値

このコードでは

2 つの質問があります。

  1. 最後の行でプロパティのステータスを 0 または ""(空の文字列) に設定すると、エラーが発生するのはなぜですか?

キャッチされていない TypeError: 'set' on proxy: トラップがプロパティ 'status' に対して false を返しました(…)

  1. 仕様では、ブール値を返す必要があると書かれています。しかし、私の場合、 set() メソッドではブール値を返しません。その場合、なぜこのコードは機能するのでしょうか?
0 投票する
2 に答える
1042 参照

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は次のように述べています。

プロパティがターゲット オブジェクトの独自のプロパティとして存在しない場合、またはターゲット オブジェクトの構成可能な独自のプロパティとして存在する場合、そのプロパティは構成不可として報告できません。

しかし、この背後にある理由については説明していません。

このエラーの回避策はありますか?