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

using spread operator in class methods vs functions

我会尽量保持简洁:

我有这个静态class方法

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)
}

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

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

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

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