不能将类作为函数调用

Cannot call a class as a function

本文关键字:函数调用 不能      更新时间:2023-09-26

有什么方法可以让我把类作为函数调用吗。我希望具有以下功能,其中类中有一个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)
})

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

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

// MyLib.js
class MyLib {
  constructor(selector){}
  someMethod(){}
  ...
}
export function MyFunction(selector){
  return new MyLib(selector)
}

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

例如,我使用vanilla js编写了一个简单的jQuery替换,我只需将$更改为J,就可以替换大约90%以上的jQuery语法,例如:

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(样板之外的)有点陌生——是的。

希望这能帮助到别人。