在类方法与函数中使用扩展运算符
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
,可能是2
或1
,它们可能与参数计数不匹配。为此,它会抛出参数不匹配的错误。作为一种解决方法,您可以使用参数的默认值,并且代码将起作用。
private render(fruit1 = '', fruit2 = '', fruit3 = '')
console.log(fruit1, fruit2, fruit3)
【讨论】:
以上是关于在类方法与函数中使用扩展运算符的主要内容,如果未能解决你的问题,请参考以下文章