CoffeeScript 命令模式
问题
你需要让另一个对象处理你自己的可执行的代码。
解决方案
使用 Command pattern 传递函数的引用。
# Using a private variable to simulate external scripts or modulesincrementers = (() ->privateVar = 0singleIncrementer = () ->privateVar += 1doubleIncrementer = () ->privateVar += 2commands =single: singleIncrementerdouble: doubleIncrementervalue: -> privateVar)()class RunsAllconstructor: (@commands...) ->run: -> command() for command in @commandsrunner = new RunsAll(incrementers.single, incrementers.double, incrementers.single, incrementers.double)runner.run()incrementers.value() # => 6
讨论
以函数作为一级的对象且从 Javascript 函数的变量范围中继承,CoffeeScript 使语言模式几乎看不出来。事实上,任何函数传递回调函数可以作为一个命令。
jqXHR 对象返回 jQuery AJAX 方法使用此模式。
jqxhr = $.ajaxurl: "/"logMessages = ""jqxhr.success -> logMessages += "Success!\n"jqxhr.error -> logMessages += "Error!\n"jqxhr.complete -> logMessages += "Completed!\n"# On a valid AJAX request:# logMessages == "Success!\nCompleted!\n"
转载本站内容时,请务必注明来自W3xue,违者必究。


优化或报错有奖
皖公网安备34020702000426号