JS設計模式之裝飾者模式

來源:互聯網
上載者:User

標籤:電話   ora   inline   str   document   ==   接下來   war   cti   

裝飾者模式概述

  在不改變原對象的基礎上,通過對其進行封裝拓展(添加屬性或者方法)使原有對象可以滿足使用者更複雜的需求

實際需求

  在已有的代碼基礎上,為每個表單中的input預設輸入框上邊顯示一行提示文案,當使用者點擊輸入框時文案消失

原有代碼:

var telInput = document.getElementById(‘tel_input‘);var telWarnText = document.getElementById(‘tel_warn_text‘);input.onclick = function(){  telWarnText.style.display = ‘inline-block‘;  }

第一次改進後的代碼:

var telInput = document.getElementById(‘tel_input‘);var telWarnText = document.getElementById(‘tel_warn_text‘);var telDemoText = document.getElementById(‘tel_demo_text‘);input.onclick = function(){  telWarnText.style.display = ‘inline-block‘;    telDemoText.style.display = ‘none‘;  }

第一次改進後產生的問題: 

其他頁面的表單中還存在不同輸入框,比如:姓名、地址等等,我們修改一處地方容易,可每一處代碼對應的地方都需要手動一個一個地修改,那麼有沒有更好的改善方式呢?

第二次改進:使用裝飾者模式

var decorator = function(input, fn) {    // 擷取事件來源    var input = document.getElementById(input);    // 若事件來源已綁定事件    if(typeof input.onclick === ‘function‘) {        // 緩衝事件來源原有回呼函數        var oldClickFn = input.onclick;        // 為事件來源定義新的事件        input.onclick = function() {            // 事件來源原有回呼函數            oldClcikFn();            // 執行事件來源新增回呼函數            fn();        }    }else{        // 事件來源未綁定事件,直接為事件來源添加新增回呼函數        input.onclick = fn;    }}

接下來我們可以這樣添加新功能了:

// 電話輸入框功能裝飾decorator(‘tel_input‘, function(){    document.getElementById(‘tel_demo_text‘).style.display = ‘none‘;})// 姓名輸入框功能裝飾decorator(‘name_input‘, function(){    document.getElementById(‘tel_demo_text‘).style.display = ‘none‘;})

說明:使用裝飾者模式,我們不需再過度關注對象原有的功能,並且對象原有的方法照樣可以原封不動地使用。

  

JS設計模式之裝飾者模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.