1
プロキシで「with」ステートメントを使用することは悪い習慣ですか?
まず第一に、明確にしたいのですが、これwithは非推奨であり、それを使用することは一般的に悪い習慣です。 しかし、私の質問は特別なケースについてです:Proxyのパラメーターとして特別なオブジェクトを使用しますwith。 バックグラウンド 私はプロジェクトに取り組んでおり、コードへのアクセスをグローバルスコープに制限する必要があります。 一つのアプローチは、ループを使用するのが良いかもしれないevalの値で一定の変数を作成している、undefinedグローバルオブジェクトのプロパティごとに、しかし使用するよりもさらに悪い思われるwith、として作成した変数へのアクセスを制限することはできませんletとconst。 アイデア のアイデアはProxy、の引数としてaを使用するwithことです... hastrapは常にを返すtrueので、withステートメントを超えて検索や割り当てを行うことはできません getトラップは正常に動作しますが、ReferenceError存在しない変数(プロパティ)にアクセスしようとするとs がスローされます。 set トラップは正常に動作します(またはカスタムロジックが含まれている可能性があります) targetオブジェクトにはありません[[Prototype]](つまり、で作成されましたObject.create(null)) targetオブジェクトには@@unscopables空のオブジェクトの値を持つプロパティがあり、すべてのプロパティのスコープを許可します だから、このコードのようなもの: const scope = Object.create(null) Object.assign(scope, { undefined, console, String, Number, Boolean, Array, Object, /* etc. */ [Symbol.unscopables]: Object.create(null) }) const scopeProxy = new Proxy(scope, { get: (obj, prop) => { if (prop in obj) return …