3

Proxy を使用して動的な構成不可能なプロパティを作成したいと考えています。私はこれを試しました:

const proxy = new Proxy({}, {
  getOwnPropertyDescriptor() {
    return {
      configurable: false,
      enumerable: false,
    };
  },
});

console.log(Reflect.getOwnPropertyDescriptor(proxy, 'test'));

しかし、私はエラーが発生しています:

TypeError: 'getOwnPropertyDescriptor' on proxy: trap reported non-configurability for property 'test' which is either non-existant or configurable in the proxy target

MDNは次のように述べています。

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

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

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

4

2 に答える 2

2

トラップ内でgetOwnPropertyDescriptor、記述子を返す前にターゲット オブジェクトでそのプロパティを定義すると、正常に動作するようです。

const proxy = new Proxy({}, {
  getOwnPropertyDescriptor(target, property) {
    const descriptor = {
      configurable: false,
      enumerable: false,
    };
    Reflect.defineProperty(target, property, descriptor);
    return descriptor;
  },
});

console.log(Reflect.getOwnPropertyDescriptor(proxy, 'test'));

副作用は(明らかに)作成されたプロパティであり、(構成できないため)削除できません。つまり、後で存在しないと報告することはできませんが、私の場合は問題ではありません。

于 2016-12-01T23:31:46.177 に答える