在类方法与函数中使用扩展运算符

Posted

技术标签:

【中文标题】在类方法与函数中使用扩展运算符【英文标题】:using spread operator in class methods vs functions 【发布时间】:2018-07-05 02:33:41 【问题描述】:

我会尽量保持简洁:

我有这个静态类方法

private render(fruit1, fruit2, fruit2)
  console.log(a,b,c)

setTable1 使用普通函数声明调用的方法有效。

public setTable1 = function(data) 
 this.render(...data); // spread operator works with func syntax


setTable1(['apple','banana','orange']);

但是,setTable2 在使用方法语法时不起作用

public setTable2(data) 
 this.render(...data);

除非....我把setTable2改成这个:

public setTable2(data) 
  this.render.apply(null, ...data)

导致扩展运算符失败的方法与函数语法之间的区别是什么?

【问题讨论】:

【参考方案1】:

第一种情况有效,因为你在运行时初始化setTable1,因为你没有设置它的类型,它是any(编译器不知道它是一个带有一些参数的函数),编译器不能在运行时检测到任何错误。运行时工作正常,因为它只是一个 javascript

您对第二种情况的问题与参数匹配有关。编译器无法检测到有多少值有...data,可能是21,它们可能与参数计数不匹配。为此,它会抛出参数不匹配的错误。作为一种解决方法,您可以使用参数的默认值,并且代码将起作用。

private render(fruit1 = '', fruit2 = '', fruit3 = '') 
  console.log(fruit1, fruit2, fruit3)

【讨论】:

以上是关于在类方法与函数中使用扩展运算符的主要内容,如果未能解决你的问题,请参考以下文章

rest 参数与扩展运算符

扩展运算符

使用扩展和解构运算符修改不可变对象的最短方法是啥

扩展运算符函数Graphql?

扩展运算符与 array.concat()

es6新增--变量定义与变量类型