将类实例作为JavaScript中的函数调用

时间:2018-03-14 13:59:34

标签: javascript ecmascript-6

假设我有一个班级



class foo {
  constructor() {
    this._pos = 0;
  }
  
  bar(arg) {
    console.log(arg);
  }
}

const obj = new foo();




如何才能致电:

let var1 = obj('something');

1 个答案:

答案 0 :(得分:2)

您可以通过扩展Function构造函数来创建可调用对象,但是如果您希望它访问创建的实例,您实际上需要在将实例绑定到的构造函数中创建绑定函数返回的函数。



class foo extends Function {
  constructor() {
    super("...args", "return this.bar(...args)");
    this._pos = 0;
    return this.bind(this);
  }
  
  bar(arg) {
    console.log(arg + this._pos);
  }
}

const obj = new foo();

let var1 = obj('something ');