我一直在使用coffeescript类,据我所知,函数应该总是自动返回最后一个语句。但我发现,构造函数对象中定义的函数默认情况下不返回任何内容。这是为什么?
constructor: ->
@ # <~~ returned as expected
class MyClass
constructor: ->
@ # <~~ not returned - why?
class MyClass
constructor: ->
return ->
@ # <~~ returned like normal!
var MyClass;
({
constructor: function() {
return this;
}
});
MyClass = (function() {
function MyClass() {
this;
}
return MyClass;
})();
MyClass = (function() {
function MyClass() {
return function() {
return this;
};
}
return MyClass;
})();
答案 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"