如何快速从解构任务中获取一切?

时间:2019-04-12 01:32:09

标签: javascript

例如,我有一个带有服务器功能的对象。

let funs = {
  fun1: () => { console.log('fun1') },
  fun2: () => { console.log('fun2') },
  fun3: () => { console.log('fun3') },
};

那么我想有一种快速的方法来使用此功能集。

class SampleClass {
  sampleFun() {
    {...funs} // anything similar to it?
    fun1();
  }
}

4 个答案:

答案 0 :(得分:0)

不可能。

我的另一个选择是使用功能callfuns作为词法上下文来调用该功能。

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所说的那样,无法使用快捷方式表达