Javascript 在映射方法中使用spread操作符复制对象时的方法

Javascript 在映射方法中使用spread操作符复制对象时的方法,javascript,angular,typescript,ecmascript-6,Javascript,Angular,Typescript,Ecmascript 6,我正在尝试复制对象,并在我的角度应用程序中使用扩展运算符添加新属性。要添加新属性,我想调用一个方法'addNewPropertyname',该方法返回此属性及其值。当我试图使用spread运算符调用此方法时,我得到了有关意外令牌的错误信息 这是我的密码 this.files = files['results'].map(file => ({...file, this.addNewProperty(file.name)})); addNewProperty(name) { retu

我正在尝试复制对象,并在我的角度应用程序中使用扩展运算符添加新属性。要添加新属性,我想调用一个方法'addNewPropertyname',该方法返回此属性及其值。当我试图使用spread运算符调用此方法时,我得到了有关意外令牌的错误信息

这是我的密码

this.files = files['results'].map(file => ({...file, this.addNewProperty(file.name)}));

addNewProperty(name) {
    return {
        extension: name.split('-')[1]
    };
}
另一方面,当我使用传统的Object.assign时,一切都很好

this.files = files['results'].map(file => Object.assign(file, this.addNewProperty(file.name)));

你能解释一下,为什么Object.assign工作正常,而通过{…,myMethod}复制不起作用吗?

你还需要扩展新对象。否则你就没有钥匙了

this.files = files['results'].map(file => ({...file, ...this.addNewProperty(file.name)}));
//                                                   ^^^

您还需要传播新对象。否则你就没有钥匙了

this.files = files['results'].map(file => ({...file, ...this.addNewProperty(file.name)}));
//                                                   ^^^