起初它并不明显。这是骨架。
$.fn.ourFunction = do ($=jQuery) -> (opts) ->
# do stuff
@
它编译为:
$.fn.ourFunction = (function($) {
return function(opts) {
return this;
};
})(jQuery);
为了清楚起见,我们还可以将其分成几行。
$.fn.ourFunction = do ($=jQuery) ->
(opts) ->
# do stuff
@
我们的第一行使用了do
最初运行一个函数的语法。我们还可以指定参数(例如$
)和它们的值(例如jQuery
)。
$.fn.ourFunction = do ($=jQuery) ->
我们的第二行创建了一个返回的函数。请记住,CoffeeScript 中的一切都是表达式,所以我们不需要说return (opts) ->
(但你可以)。
(opts) ->
然后,当然还有我们的代码主体,实际工作发生的地方。我在初始代码中遗漏的一个技巧是使用=>
运算符来维护范围。在我们的滚动处理程序中,我们可以强制this
保留我们的目标对象。我们可以调用$('#something').ourFunction()
并且我们有效地调用$('#something').something()
我们的滚动处理程序。
$.fn.ourFunction = do ($=jQuery) ->
(opts) ->
$(window).scroll =>
this.something()
@something()
@
我们的最后一行只是@
字符。这允许链接,因为我们正在返回this
. 或者,如果我们的最后一行在 上调用另一个可链接的方法this
,我们不需要使其显式。
$.fn.flash = do ($=jQuery) -> (opts) ->
@animate(opacity: 0).delay()
.animate({opacity: 1})