CoffeeScript中的function.call

时间:2011-08-20 08:16:31

标签: javascript function coffeescript

将以下JavaScript编写为CoffeeScript的最短方法是什么?

var obj = {};

(function(){
  this.foo = "bar";
}).call(obj);

我可以这样做:

obj = {}

(->
  @foo = "bar"
).call obj

但有没有办法摆脱函数定义周围的括号?这几乎可以工作:

do =>
  @foo = "bar"

...除了胖箭头操作符'=>'自动将函数绑定到'this'的当前值。有没有办法在使用胖箭头时指定另一个'this'值?

3 个答案:

答案 0 :(得分:2)

你无法摆脱括号,但你可以在一行中写出这个功能。

(-> @foo = 'bar').call obj

答案 1 :(得分:1)

你应该接受Dogbert的回答。但是,如果你真的在寻找编写代码的最短方法,那么答案就是

obj.foo = 'bar'

抵制过度使用匿名函数的诱惑。

答案 2 :(得分:0)

您从一开始就得到了答案,但应该添加:

obj = {}

do (obj) ->
  obj.foo = "bar"

编译为

(function(obj){
  return obj.foo = 'bar';
})(obj);