例如,我有一个带有服务器功能的对象。
let funs = {
fun1: () => { console.log('fun1') },
fun2: () => { console.log('fun2') },
fun3: () => { console.log('fun3') },
};
那么我想有一种快速的方法来使用此功能集。
class SampleClass {
sampleFun() {
{...funs} // anything similar to it?
fun1();
}
}
答案 0 :(得分:0)
不可能。
我的另一个选择是使用功能call
和funs
作为词法上下文来调用该功能。
let funs = {
fun1: () => { console.log('fun1') },
fun2: () => { console.log('fun2') },
fun3: () => { console.log('fun3') },
};
class SampleClass {
sampleFun() {
this.fun1();
this.fun2();
}
}
new SampleClass().sampleFun.call(funs);
答案 1 :(得分:0)
您可以使用Object.assign()
将函数拉入实例的名称空间,然后可以使用this.fun1()
进行调用,等等...
let funs = {
fun1: () => { console.log('fun1') },
fun2: () => { console.log('fun2') },
fun3: () => { console.log('fun3') },
};
class SampleClass {
constructor(funs) {
Object.assign(this, funs)
}
sampleFun() {
this.fun1()
this.fun2()
this.fun3()
}
}
let s = new SampleClass(funs)
s.sampleFun()
答案 2 :(得分:0)
没有办法做到。换句话说,您要查询动态变量名,如果不使用eval()
则无法使用。这是您的代码,函数名称是连续的,您可以使用循环调用所有函数。
let funs = {
fun1: () => { console.log('fun1') },
fun2: () => { console.log('fun2') },
fun3: () => { console.log('fun3') },
};
class SampleClass {
constructor(funs) {
Object.assign(this, funs)
}
sampleFun() {
for(let i = 1;i<=3;i++){
this[`fun${i}`]();
}
}
}
let s = new SampleClass(funs)
s.sampleFun()
答案 3 :(得分:0)
我认为所有答案都是正确的,但实际上我正在寻找快捷方式;就像@CertainPerformance所说的那样,无法使用快捷方式表达