Coffeescript类没有返回最后一个函数声明

时间:2012-08-22 20:33:53

标签: coffeescript

我一直在使用coffeescript类,据我所知,函数应该总是自动返回最后一个语句。但我发现,构造函数对象中定义的函数默认情况下不返回任何内容。这是为什么?

的CoffeeScript

constructor: ->
  @ # <~~ returned as expected

class MyClass
  constructor: ->
    @ # <~~ not returned - why?

class MyClass
  constructor: ->
    return ->
      @ # <~~ returned like normal!

的JavaScript

var MyClass;

({
  constructor: function() {
    return this;
  }
});

MyClass = (function() {

  function MyClass() {
    this;

  }

  return MyClass;

})();

MyClass = (function() {

  function MyClass() {
    return function() {
      return this;
    };
  }

  return MyClass;

})();

2 个答案:

答案 0 :(得分:3)

当您在类上使用“new”关键字时,将调用“构造函数”方法 - 因此返回值始终应该是新实例,而不是您要返回的其他值。但是,似乎CoffeeScripts允许您通过“return”关键字强制使用不同的返回值。

class Foo
  constructor: -> {}

f = new Foo
f instanceof Foo   # expected to be very true...

当你命名一个普通函数“constructor”(不是一个方法=在类定义之外)时,它不是一个构造函数而是一个常规函数,因此会按预期返回。

答案 1 :(得分:2)

如果要从“构造函数”方法返回其他对象,请执行 需要创建一个工厂方法,因为Coffeescript和Javascript没有 允许重载“新”运算符

 class A
   @create: (params)-> new A params
   constructor: (params)-> console.log params

 a = A.create "foo"