我会尝试保持这种简洁:
我有这个静态类方法
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)
}
导致扩展运算符失败的方法与函数语法之间的区别是什么?
答案 0 :(得分:2)
第一种情况是有效的,因为你在运行时初始化setTable1
并且因为你没有设置它的类型,它是any
(编译器不知道它是带有一些参数的函数),并且编译器在运行时之前无法检测到任何错误。运行时工作正常,因为它只是一个Javascript。
第二种情况的问题与参数匹配有关。编译器无法检测有多少值...data
,可能2
或1
,这些值可能与参数计数不匹配。为此,它会抛出参数不匹配的错误。作为一种解决方法,您可以使用参数的默认值,代码也可以使用。
private render(fruit1 = '', fruit2 = '', fruit3 = '') {
console.log(fruit1, fruit2, fruit3)
}