CoffeeScript攻略2.5:鏈式呼叫物件
問題
你想呼叫一個物件上的多個方法,但不想每次都引用該物件。
方案
在每次鏈式呼叫後返回this(即@)物件
class CoffeeCup
properties:
strength: 'medium'
cream: false
sugar: false
strength: (newStrength) ->
@properties.strength = newStrength
@
cream: (newCream) ->
@properties.cream = newCream
@
sugar: (newSugar) ->
@properties.sugar = newSugar
@
morningCup = new CoffeeCup()
morningCup.properties # => { strength: 'medium', cream: false, sugar: false }
eveningCup = new CoffeeCup().strength('dark').cream(true).sugar(true)
eveningCup.properties # => { strength: 'dark', cream: true, sugar: true }
討論
jQuery庫使用類似的手段從每一個相關的方法中返回選擇符物件,並在後續方法中通過調整選擇的範圍修改該物件:
$('p').filter('.topic').first()
對我們自己物件而言,一點點超程式設計就可以自動設定這個過程並明確宣告返回this的意圖。
addChainedAttributeAccessor = (obj, propertyAttr, attr) ->
obj[attr] = (newValues...) ->
if newValues.length == 0
obj[propertyAttr][attr]
else
obj[propertyAttr][attr] = newValues[0]
obj
class TeaCup
properties:
size: 'medium'
type: 'black'
sugar: false
cream: false
addChainedAttributeAccessor(TeaCup.prototype, 'properties', attr) for attr of TeaCup.prototype.properties
earlgrey = new TeaCup().size('small').type('Earl Grey').sugar('false')
earlgrey.properties # => { size: 'small', type: 'Earl Grey', sugar: false }
earlgrey.sugar true
earlgrey.sugar() # => true
相關文章
- jQuery鏈式呼叫thisjQuery
- js 鏈式呼叫JS
- jQuery的鏈式呼叫jQuery
- Promise 原始碼:then 鏈式呼叫Promise原始碼
- JavaScript中的鏈式呼叫JavaScript
- PHP 建立鏈式物件PHP物件
- 從鏈式呼叫到管道組合
- 分散式服務呼叫鏈追蹤分散式
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- 像跟蹤分散式服務呼叫那樣跟蹤 Go 函式呼叫鏈分散式Go函式
- 用Promise實現小程式介面鏈式呼叫Promise
- 鏈式呼叫 | 我的程式碼沒有else
- js 實現鏈式呼叫名稱空間JS
- 如何在PHP中實現鏈式方法呼叫PHP
- 呼叫鏈系列(2):輕呼叫鏈實現
- 鏈式-父類中返回子類物件物件
- GO 的鏈式呼叫寫一個轉碼庫Go
- 經典鏈式呼叫 Person("Dan").sleep(2).eat("dinner")
- 呼叫鏈系列四:呼叫鏈上下文傳遞
- CoffeeScript和Sass提高Web開發效率Web
- JS-非同步函式鏈式呼叫2(精簡版,推薦)JS非同步函式
- 呼叫鏈與日誌關聯的探索式查詢
- 技術卡片 - PHP 鏈式呼叫的簡單實現PHP
- JS建構函式,原型鏈,原型物件總結JS函式原型物件
- JS function 是函式也是物件, 淺談原型鏈JSFunction函式物件原型
- Sentinel 原理-呼叫鏈
- 呼叫鏈系列三:解讀UAVStack中的呼叫鏈技術
- 呼叫鏈系列二:解讀UAVStack中的呼叫鏈技術
- 呼叫鏈系列一:解讀UAVStack中的呼叫鏈技術
- 呼叫鏈與日誌的關聯式跟蹤查詢
- 一道題解:前端鏈式呼叫和事件迴圈前端事件
- 測試 ES6 Promise 物件的鏈式傳值Promise物件
- 原型與原型鏈 - 物件與函式關係筆記原型物件函式筆記
- 物件呼叫動態變數物件變數
- javascript變數物件函式呼叫棧作用域閉包等細解!JavaScript變數物件函式
- php用curl封裝一個http請求類(鏈式呼叫)PHP封裝HTTP
- 最最最通俗易懂的promise手寫系列(二)- 鏈式呼叫Promise
- JS基礎-函式、物件和原型、原型鏈的關係JS函式物件原型
- 鴻蒙Next資料同步藝術:分散式物件與跨裝置呼叫鴻蒙分散式物件