如何覆盖javascript类上的扩展操作



我有一个名为Myclass的类

class Myclass {
constructor(
public title: string,
) { }
}
在下一个示例中,我想更改展开操作的结果
let myobject = new Myclass('hello');
console.log({...myobject});

要的结果例如

{
new_title_name : 'hello'
}

这是不可能的。ECMA-262规范只描述了扩展操作符处理对象的一种方式,不能覆盖它。

如果想要更改展开的键值对集合,则需要提供不同的对象。这样的对象可以通过函数、方法或属性生成:

class Myclass {
get data() {
const result = {};
for (const k in this) {
if (typeof this[k] === 'number')
result[k.toUpperCase()] = this[k];
}
return result;
}
};
const obj = new Myclass();
obj.a = [];
obj.b = null;
obj.c = 13;
obj.d = 'test';
console.info({ ...obj.data });

最新更新