关于...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回答
-
你好,这里的 ...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!
122019-12-11
相似问题