Node.js | Переопределить сеттер - PullRequest
0 голосов
/ 05 марта 2020

У меня есть экземпляр класса (в моем случае класс URL), который называется req_url. URL имеет свойство, которое имеет установщик для одного из своих свойств (search), которое реализовано таким образом, который проблематичен для меня c (не только устанавливает заданное значение, но сначала что-то с ним делает) .

Как я могу переопределить этот установщик, не создавая класс, который наследует от URL (а затем создайте другой установщик)?

defineProperty не работает, так как он работает на Object уровень. Я хочу сделать это на указанном c уровне типа.

1 Ответ

1 голос
/ 05 марта 2020

Всякий раз, когда у вас есть экземпляр, установщик которого вы хотите обойти, вызов Object.defineProperty для экземпляра для установки свойства работает:

class Foo {
  set prop(arg) {
    console.log('setter invoked');
  }
}

const f = new Foo();
Object.defineProperty(f, 'prop', { value: 'val' });
console.log(f.prop);

Это не повлияет на любой объект, оно повлияет только на объекты, с которыми вы явно вызываете Object.defineProperty. Столкновения с другими объектами, о которых вы, похоже, беспокоитесь, не произойдут.

Другой (странный) вариант - удалить установщик в прототипе, хотя, если класс используется где-то еще, вне вашего кода, это может вызвать проблемы:

class Foo {
  set prop(arg) {
    console.log('setter invoked');
  }
}
delete Foo.prototype.prop;

const f = new Foo();
f.prop = 'val';
console.log(f.prop);
...