node.js - 如何将扩展运算符与 'this' 一起使用?

标签 node.js typescript spread-syntax

我正在 TypeScript 中定义一个类。 因此,使用展开运算符,我可以发出这样的命令:

class Foo {
  constructor(data: IDataStructure){
      const { ...k } = data; // and then k has taken over all the properties of data. Great!
  }

  public render () {

    return(<div/>

   );
  }
}

现在,我想做同样的事情,但不是将属性放在 k 中,而是放在正在创建的当前对象中。 IE。我想做一些类似 const { ...this } = data; 在 Typescript 中执行此操作的聪明方法吗?

最佳答案

您不能使用 spread 向现有对象添加属性。当前没有语法可以做到这一点;相反,使用 Object.assign :

Object.assign(this, data);

示例(在 JavaScript 中):

class Example {
    constructor(data) {
        Object.assign(this, data);
    }
}
const e = new Example({answer: 42});
console.log(e.answer); // 42

请注意,Object.assign 对属性进行浅复制。因此,如果 data 的属性之一引用了一个对象,则该引用将被复制,并且 datathis 将引用同一个对象:

const data = {
    answer: 67,
    obj: {
        prop: "value"
    }
};
Object.assign(this, data);
console.log(this.obj === data.obj); // true, it's a shallow copy, they both refer
                                    // to the same object

如果您需要深层复制,其中复制data也会生成data.obj的副本,请参阅this question's answers .

关于node.js - 如何将扩展运算符与 'this' 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51772641/

相关文章:

node.js - lodash 的 _.map 和 _.pluck 有什么区别?

javascript - Browserify 与 Polymer 和/或 AngularJS 兼容吗

javascript - Angular HttpClient如何将结果传递给模板

javascript - 在一行代码中用扩展语法替换数组条目?

javascript - ECMAScript 文档中的 SpreadElement 是什么?它和 MDN 上的 Spread 语法一样吗?

javascript - NodeJS 错误堆栈未定义

javascript - Sequelize 不会从数据库获取表

typescript - HTML2Canvas 在 Ionic4 角度项目中生成空白图像。控制台中没有错误。相同的代码在纯 html/javascript 中生成正确的图像

javascript - 混淆了箭头函数javascript

reactjs - 在 React 组件中使用展开语法时顺序重要吗?