This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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 г.⁩.

Метод handler.deleteProperty() является "ловушкой" (функция-перехватчик) для оператора delete.

Интерактивный пример

const monster1 = {
  texture: "scaly",
};

const handler1 = {
  deleteProperty(target, prop) {
    if (prop in target) {
      delete target[prop];
      console.log(`property removed: ${prop}`);
      // Expected output: "property removed: texture"
    }
  },
};

console.log(monster1.texture);
// Expected output: "scaly"

const proxy1 = new Proxy(monster1, handler1);
delete proxy1.texture;

console.log(monster1.texture);
// Expected output: undefined

Синтаксис

js
var p = new Proxy(target, {
  deleteProperty: function (target, property) {},
});

Параметры

Следующие параметры передаются в метод deleteProperty.

target

Целевой объект.

property

Имя или Symbol свойства, которое нужно удалить.

this в момент вызова ссылается на объект handler.

Возвращаемое значение

Метод deleteProperty должен возвращать Boolean. Значение true, если свойство было успешно удалено, в противном случае false.

Описание

Метод handler.deleteProperty() является "ловушкой" для оператора delete.

Перехваты

Данная "ловушка" может перехватывать следующие операции:

Инварианты

Если следующие инварианты нарушены, то прокси выдаст ошибку TypeError:

  • Свойство не может быть удалено, если оно неконфигурируемое собственное свойство целевого объекта.

Примеры

Следующий код перехватывает действие оператора delete.

js
var p = new Proxy(
  {},
  {
    deleteProperty: function (target, prop) {
      if (prop in target) {
        delete target[prop];
        console.log("property removed: " + prop);
        return true;
      } else {
        console.log("property not found: " + prop);
        return false;
      }
    },
  },
);

var result;

p.a = 10;
console.log("a" in p); // true

result = delete p.a; // "property removed: a"
console.log(result); // true
console.log("a" in p); // false

result = delete p.a; // "property not found: a"
console.log(result); // false

Спецификации

Specification
ECMAScript® 2026 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-delete-p

Совместимость с браузерами

Смотрите также