无法将类作为函数调用

Tho*_*ggi 12 javascript class ecmascript-6

有没有什么方法可以让我把一个类称为函数.我正在寻找下面的功能,其中有一个main类中的方法,这是我想让方法执行的方法.

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

test().then(name => {
  console.log(name)
})
Run Code Online (Sandbox Code Playgroud)

看来我唯一的另一个选择是拥有这样的包装函数.

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)
})
Run Code Online (Sandbox Code Playgroud)

Der*_*kDX 13

使用newJavaScript中使用类时关键字.new在类名之前我添加了类似的问题.


小智 2

我知道我迟到了好几年,但我找到的解决方案是这样的:

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

export function MyFunction(selector){
  return new MyLib(selector)
}
Run Code Online (Sandbox Code Playgroud)

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

例如,我使用 vanilla js 编写了一个简单的 jQuery 替换,并且我实际上替换了大约 90% 以上的 jQuery 语法,只需更改$J

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

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

希望这对某人有帮助。