javascript適配器模式----2022-11-20

/**
 * 概念:適配器模式
 * 將一個(gè)類(對(duì)象)的接口(方法或者屬性)轉(zhuǎn)化成另外一個(gè)接口,以滿足用戶需求,使類(對(duì)象)之間接口
 * 的不兼容問題通過適配器得以解決
 */

// 1、juqery 適配器
// window.A = A = jquery

// 2、適配異類框架
// 假如有這么一個(gè)A類框架
// 定義框架
var A = A || {};
// 通過ID 獲取元素
A.g = function(id) {
    return document.getElementById(id)
}
// 為元素綁定事件
A.on = function(id, type, fn) {
    // 如果傳遞參數(shù)是字符串則以id處理,否則以元素對(duì)象處理
    var dom = typeof id === 'string'? this.g(id) : id;
    // 標(biāo)準(zhǔn) DOM2 級(jí)添加事件方式
    if (dom.addEventListener) {
        dom.addEventListener(type, fn, false);
        // IE DOM2 級(jí)添加事件方式
    } else if(dom.attachEvent) {
        dom.attachEvent('on' + type, fn);
        // 簡易添加事件方式
    } else {
        dom['on' + type] = fn
    }
}

// 用例
A.on(window, 'load', function() {
    // 按鈕點(diǎn)擊事件
    A.on('mybutton', 'click', function() {
        console.log('點(diǎn)擊成功')
    })
})

// 加入之前我們用的A框架寫的代碼,現(xiàn)在想轉(zhuǎn)換為jquery,那么我們需要寫一個(gè)適配器,適配以前的代碼
// 下面是適配器
A.g = function(id) {
    // 通過jquery 獲取jquery 對(duì)象,然后返回第一個(gè)成員
    return $(id).get(0)
}

A.on = function(id, type, fn) {
    // 如果傳遞參數(shù)是字符串則以id 處理,否則以元素對(duì)象處理
    var dom = typeof id === 'string' ? $('#' + id) : $(id);
    dom.on(type, fn);
}
// end


/**
 * 參數(shù)適配器
 * 比如我們封裝一個(gè)方法需要傳很多參數(shù),然而我們一個(gè)一個(gè)傳,是很難記住每一個(gè)參數(shù)的
 * 因此我們的做法是傳遞一個(gè)對(duì)象過去,使用此種方法,就要用適配器來適配傳入的這個(gè)參數(shù)對(duì)象,給默認(rèn)值
 * 
 */

function doSomeThing(obj) {
    var _adapter = {
        name: '王亞浩',
        title: '設(shè)計(jì)模式',
        age: 24,
        color: 'pink',
        size: 100,
        prize: 50
    };
    for (let i in _adapter) {
      _adapter[i]  = obj[i] || _adapter[i];
    }
    // 或者extend(_adapter, obj) 注此時(shí)可能會(huì)多添加屬性
}

// 數(shù)據(jù)適配
// 元數(shù)據(jù)
var arr = ['javascript', 'book', '前端編程語言', '8月1日']
// 目標(biāo)數(shù)據(jù)結(jié)構(gòu)
var obj = {
    name:'',
    type:'',
    title:'',
    time:''
}

function arrToObjAdapter (arr) {
    return {
        name: arr[0],
        type: arr[1],
        title: arr[2],
        data: arr[03],
    }
}

// 用例
var adapterData = arrToObjAdapter(arr)
console.log(adapterData)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容