1

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

咖啡脚本

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;

})();
4

2 回答 2

3

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

class Foo
  constructor: -> {}

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

当您将普通函数命名为“构造函数”(不是类定义之外的方法=)时,它不是构造函数而是常规函数,因此按预期返回。

于 2012-08-22T20:36:47.287 回答
2

如果要从“构造函数”方法返回不同的对象,则需要创建工厂方法,因为 Coffeescript 和 Javascript 不允许重载“新”运算符

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

 a = A.create "foo"
于 2012-08-27T14:35:10.833 回答