关于...this

来源:3-8 表单常见属性解析

Daniyar

2019-12-10

老师,您好!

const newRule = [
          ...this.rules.user,
          { validator: userValidator, trigger: 'change' }
        ]
        this.rules = Object.assign({}, this.rules, { user: newRule })
      }

在这段代码中的“…this”是什么意思?为什么要这样写呢?

写回答

1回答

Sam

2019-12-10

你好,这里的 ...this 是扩展运算符,它会依次将 this.rules.user 数组中的所有属性全部展开,并依次加入数组中,生成一个新的数组,看下面一个例子:

var obj = [{ a: 1 }, { b: 2 }];
var newObj = [...obj, { c: 3 }];

newObj 的值如下:

0: {a: 1}
1: {b: 2}
2: {c: 3}

由此可见这段代码的用途是将 obj 数组和 { c: 3} 这个对象合并生成一个新的数组。这样的好处如下:

1、代码非常简洁,如果不用扩展运算符,我们需要这样写:

var newObj = [].concat(obj, {c: 3});

或者

var newObj = [];
obj.forEach(item => newObj.push(item));
newObj.push({ c: 3 });

对比下来,扩展运算符写法最简洁,最容易理解

2、使用扩展运算符生成的对象会自动执行浅拷贝,这个是非常重要的特性,看下面的例子:

var obj = [{ a: 1 }, { b: 2 }];
var newObj = [...obj];
obj === newObj //false

即使原封不动的拷贝数组的值,newObj 也不等于 obj!

1
2
Daniyar
老师,我还有个小的请求。我这边实在是安装不了tui-editor依赖。如果您那儿方便的话可以给我发一下node_modules的内容或者tui-editor相关的依赖包吗?非常谢谢!!! 邮箱号:840130423@qq.com
2019-12-11
共2条回复

Vue Element+Node.js开发企业通用管理后台系统

基于Element的中后台课程,一套中小型企业通用的后台管理系统

2829 学习 · 1714 问题

查看课程