handler.deleteProperty()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2016年9月.
handler.deleteProperty() メソッドは、オブジェクトの [[Delete]] 内部メソッドに対するトラップです。 delete などの操作で使用されます。
試してみましょう
const monster = {
texture: "scaly",
};
const handler = {
deleteProperty(target, prop) {
if (prop in target) {
delete target[prop];
console.log(`property removed: ${prop}`);
// 予想される結果: "property removed: texture"
}
},
};
console.log(monster.texture);
// 予想される結果: "scaly"
const proxy = new Proxy(monster, handler);
delete proxy.texture;
console.log(monster.texture);
// 予想される結果: undefined
構文
js
new Proxy(target, {
deleteProperty(target, property) {
}
})
引数
次の引数が deleteProperty メソッドに渡されます。
this はハンドラーにバインドされます。
返値
deleteProperty() メソッドはプロパティが正しく削除されたかどうか示す論理値を返さなければなりません。
解説
>介入
このトラップは下記の操作に介入できます。
delete演算子:delete proxy[foo]やdelete proxy.fooReflect.deleteProperty()
他にも、[[Delete]] 内部メソッドを呼び出すあらゆる操作に介入できます。
不変条件
以下の不変条件に違反している場合、プロキシーは TypeError を発生します。
- ターゲットオブジェクトの非設定独自プロパティとして存在する場合、プロパティは削除されません。
例
>プロパティ値の取得のトラップ
次のコードは delete 操作をトラップします。
js
const p = new Proxy(
{},
{
deleteProperty(target, prop) {
if (!(prop in target)) {
console.log(`property not found: ${prop}`);
return false;
}
delete target[prop];
console.log(`property removed: ${prop}`);
return true;
},
},
);
p.a = 10;
console.log("a" in p); // true
const result1 = delete p.a; // "property removed: a"
console.log(result1); // true
console.log("a" in p); // false
const result2 = delete p.a; // "property not found: a"
console.log(result2); // false
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-delete-p> |
ブラウザーの互換性
Loading…