Node.js |覆盖 Setter
Node.js | Override Setter
我有一个 class 实例(在我的例子中 class 是 URL
),名为 req_url
。 URL
有一个 属性,它的一个属性 (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);
我有一个 class 实例(在我的例子中 class 是 URL
),名为 req_url
。 URL
有一个 属性,它的一个属性 (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);