CoffeeScript 命令模式

2022-06-29 17:14 更新

命令模式

問(wèn)題

你需要讓另一個(gè)對(duì)象處理你自己的可執(zhí)行的代碼。

解決方案

使用Command pattern傳遞函數(shù)的引用。

# Using a private variable to simulate external scripts or modules
incrementers = (() ->
    privateVar = 0

    singleIncrementer = () ->
        privateVar += 1

    doubleIncrementer = () ->
        privateVar += 2

    commands = 
        single: singleIncrementer
        double: doubleIncrementer
        value: -> privateVar
)()

class RunsAll
    constructor: (@commands...) ->
    run: -> command() for command in @commands

runner = new RunsAll(incrementers.single, incrementers.double, incrementers.single, incrementers.double)
runner.run()
incrementers.value() # => 6

討論

以函數(shù)作為一級(jí)的對(duì)象且從Javascript函數(shù)的變量范圍中繼承,CoffeeScript使語(yǔ)言模式幾乎看不出來(lái)。事實(shí)上,任何函數(shù)傳遞回調(diào)函數(shù)可以作為一個(gè)命令。

jqXHR對(duì)象返回jQuery AJAX方法使用此模式。

jqxhr = $.ajax
    url: "/"

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"
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)