我可以使用CoffeeScript中的类使'new'关键字可选吗?

Dan*_*Tao 3 javascript coffeescript

在JavaScript中,您可以使用一个小技巧来使new关键字可选:

function Frob(args) {
  if (!(this instanceof Frob)) {
    return new Frob(args);
  }

  // Normal initialization logic
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以Frob使用或不使用new关键字来实例化:

new Frob('foo'); // a Frob instance
Frob('bar');     // also a Frob instance
Run Code Online (Sandbox Code Playgroud)

有没有办法class在CoffeeScript中使用关键字执行此操作?

Rob*_*b W 5

只需定义一个构造函数:

class Frob
  constructor: (args) ->
    return new Frob(args) unless this instanceof Frob
    ### Rest of your init code ###
Run Code Online (Sandbox Code Playgroud)

输出:

var Frob;

Frob = (function() {
  function Frob(args) {
    if (!(this instanceof Frob)) {
      return new Frob(args);
    }
  }

  return Frob;

})();
Run Code Online (Sandbox Code Playgroud)