1

当我运行以下 Coffeescript 代码时:

@sum = (x, y) -> x + y

我得到这个编译的Javascript:

(function() {

    this.sum = function(x, y) {
        return x + y;
    };

}).call(this);

Coffeescript 中有没有办法用任意对象替换thisin之类的东西?.call(this)myObject

4

2 回答 2

1
myobj.sum = (x, y) -> x + y

应该编译为(更新:请参阅 Rob W 的编译选项答案):-

myobj.sum = function(x, y) {
  return x + y;
};

这不是你想要的吗?因此,您可以进一步使用myobj.sum a, b

完整的代码..

myobj = {}
myobj.sum = (x, y) -> x + y

alert(myobj.sum 10,4)
于 2012-08-24T09:26:57.130 回答
1

(function() {并且}).call(this);不是编译的结果@sum = ...,而是由coffee可执行文件添加的。是编译的实际结果:

this.sum = function(x, y) {
  return x + y;
};

要获得不同/所需的输出,请使用以下代码coffee -b -c运行(coffee -bccoffee --bare --compile):

(-> 
  @sum = (x, y) -> x + y
).call WHATEVER

变成

(function() {
  return this.sum = function(x, y) {
    return x + y;
  };
}).call(WHATEVER);
于 2012-08-24T09:34:30.567 回答