js DSL流暢介面(使用鏈式呼叫)例項程式碼
認真研究了一會DSL,發現了這麼幾件有趣的事,js用得最多的一個東西怕是鏈式呼叫 (即Method Chaining)。
有意思的是Martin Flower指出:
[JavaScript] 純文字檢視 複製程式碼I've also noticed a common misconception - many people seem to equate fluent interfaces with Method Chaining. Certainly chaining is a common technique to use with fluent interfaces, but true fluency is much more than that.
很多人將鏈式呼叫等同於流暢介面。然而鏈式呼叫是流暢介面的一種常用方法,真實的流暢介面不止這麼一點點。
DSL 流暢介面:
流暢介面的初衷是構建可讀的API,畢竟程式碼是寫給人看的。
類似的,簡單的看一下早先我們是通過方法級聯來操作DOM。
[JavaScript] 純文字檢視 複製程式碼var btn = document.createElement("BUTTON"); // Create a <button> element var t = document.createTextNode("CLICK ME"); // Create a text node btn.appendChild(t); // Append the text to <button> document.body.appendChild(btn); // Append <button> to <body>
而用jQuery寫的話,便是這樣子:
[JavaScript] 純文字檢視 複製程式碼$('<span>').append("CLICK ME");
於是我們便可以建立一個簡單的示例來展示這個最簡單的DSL:
[JavaScript] 純文字檢視 複製程式碼Func = (function() { this.add = function(){ console.log('1'); return this; }; this.result = function(){ console.log('2'); return this; }; return this; }); var func = new Func(); func.add().result();
然而這看上去像是表示式生成器。
DSL 表示式生成器:
表示式生成器物件提供一組連貫介面,之後將連貫介面呼叫轉換為對底層命令-查詢API的呼叫。
這樣的API,我們可以在一些關於資料庫的API中看到:
[JavaScript] 純文字檢視 複製程式碼var query =SQL('select name, desc from widgets') .WHERE('price < ', $(params.max_price), AND,'clearance = ', $(params.clearance)) .ORDERBY('name asc');
鏈式呼叫有一個問題就是收尾,同上的程式碼裡面沒有收尾,這讓人很迷惑。加上一個query和end似乎是一個不錯的結果。
其他:
方法級聯
表示如下:
[JavaScript] 純文字檢視 複製程式碼a.b(); a.c();
相關文章
- jQuery鏈式呼叫簡單例項程式碼jQuery單例
- jQuery鏈式呼叫例項分析jQuery
- js使用XMLHttpRequest例項程式碼JSXMLHTTP
- js呼叫執行exe應用程式程式碼例項JS
- js冪函式程式碼例項分享JS函式
- js with語句使用程式碼例項JS
- js 物件反射使用程式碼例項JS物件反射
- js 鏈式呼叫JS
- js confirm()函式用法程式碼例項JS函式
- js prototype屬性使用程式碼例項JS
- jQuery css()函式使用程式碼例項jQueryCSS函式
- js刮刮樂程式碼例項JS
- toJSON()程式碼例項JSON
- 用Promise實現小程式介面鏈式呼叫Promise
- angularJS的$attrs方法使用程式碼例項AngularJS
- jQuery瀑布流佈局程式碼例項jQuery
- js模擬實現replaceAll()函式程式碼例項JS函式
- js函式作為函式的引數程式碼例項JS函式
- js confirm()程式碼例項JS
- 網頁版微信介面呼叫例項網頁
- js下拉滾動條瀑布流載入資料程式碼例項JS
- linux c程式呼叫lua程式碼的例項LinuxC程式
- hasOwnProperty()函式程式碼例項函式
- js監聽鍵盤事件程式碼例項例項JS事件
- $$和||使用程式碼例項
- js批量註冊事件處理函式程式碼例項JS事件函式
- js自定義回撥函式簡單程式碼例項JS函式
- js給函式設定預設值程式碼例項JS函式
- js的建構函式和原型用法程式碼例項JS函式原型
- js獲取指定函式的形參程式碼例項JS函式
- js動態設定元素css樣式程式碼例項JSCSS
- js郵箱驗證正規表示式例項程式碼JS
- 使用js實現儲存讀取js字串程式碼例項JS字串
- js選項卡簡單程式碼例項JS
- 原生js tab選項卡程式碼例項JS
- js生成GUID程式碼例項JSGUI
- js阻止事件冒泡例項程式碼JS事件
- js重力球效果程式碼例項JS