Node.js |覆盖设置器

问题描述 投票:0回答:1

我有一个类实例(在我的情况下是URL),称为req_urlURL的一个属性为其属性之一(search)提供了一个setter,这对我来说是一种有问题的实现方式(不仅是设置给定值,而是先对其进行操作)。

如何在不创建从URL继承的类的情况下重写该设置器,然后创建一个不同的设置器?

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

node.js url overriding setter
1个回答
0
投票

[只要您有一个要绕过设置器的实例,就可以在该实例上调用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);

它不会影响any对象,它只会影响显式调用Object.defineProperty的对象。与您似乎担心的其他对象的碰撞不会发生。

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

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

const f = new Foo();
f.prop = 'val';
console.log(f.prop);
© www.soinside.com 2019 - 2024. All rights reserved.