在 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
,可能 2
或 1
可能与参数计数不匹配。为此,它会抛出 参数与 不匹配的错误。作为解决方法,您可以使用参数的默认值,代码将起作用。
private render(fruit1 = '', fruit2 = '', fruit3 = '') {
console.log(fruit1, fruit2, fruit3)
}
我会尽量保持简洁:
我有这个静态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
,可能 2
或 1
可能与参数计数不匹配。为此,它会抛出 参数与 不匹配的错误。作为解决方法,您可以使用参数的默认值,代码将起作用。
private render(fruit1 = '', fruit2 = '', fruit3 = '') {
console.log(fruit1, fruit2, fruit3)
}