Node.js |覆盖 Setter

Node.js | Override Setter

我有一个 class 实例(在我的例子中 class 是 URL),名为 req_urlURL 有一个 属性,它的一个属性 (search) 有一个 setter,它的实现方式对我来说是有问题的(不只是设置给定值,但首先对其进行处理)。

如何在不创建继承自 URL 的 class 的情况下覆盖 setter(然后创建不同的 setter)?

defineProperty 不起作用,因为它在 Object 级别起作用。我想在特定类型级别上进行。

每当你有一个你想绕过其 setter 的实例时,在实例上调用 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的对象。您似乎担心的与其他物体的碰撞不会发生。

另一个(陌生人)选项是删除原型上的 setter,但如果 class 在代码之外的其他地方使用,可能会导致问题:

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

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