无法将类作为函数调用

时间:2016-04-19 16:31:10

标签: javascript class ecmascript-6

是否有任何方法可以让我将一个类称为函数。我正在寻找下面的功能,其中类中有一个main方法,这就是我想让方法执行的方法。

class test {
  constructor () {
    return this.main
  }
  main () {
    return Promise.resolve('thomas')
  }
}

test().then(name => {
  console.log(name)
})

似乎我唯一的另一个选择是拥有这样的包装函数。

class Test {
  constructor (name) {
    this.name = name
  }
  main () {
    return Promise.resolve(this.name)
  }
}

let test = (name) => {
  return new Test(name).main()
}

test('thomas').then(name => {
  console.log(name)
})

2 个答案:

答案 0 :(得分:11)

在JavaScript中使用类时使用new关键字。在类名之前添加new之前,我遇到了类似的问题。

答案 1 :(得分:0)

我知道我迟到了,但是我找到的解决方法是:

// MyLib.js
class MyLib {
  constructor(selector){}
  someMethod(){}
  ...
}

export function MyFunction(selector){
  return new MyLib(selector)
}

那么我不需要使用new,我可以简单地MyFunction().someMethod()

例如,我使用香草js编写了一个简单的jQuery替换,而我只是通过将$更改为J来替换掉jQuery语法的90%以上,例如:

J().ready(function(){})
J().ajax(...).then((res)=>{}).catch((err)=>{}) // used axios here
J('.someClass').find('li').last()
J('header').css({display:'block'})
//etc

顺便说一句,我发现使用webpack全局公开它更具挑战性……但是对于webpack(在样板之外)我还有些陌生-是的。

希望这对某人有帮助。