美文网首页
javascript之外观模式 -- 2022-11-20

javascript之外观模式 -- 2022-11-20

作者: 前端Tree | 来源:发表于2022-11-19 01:14 被阅读0次
/**
 * 概念:外观模式
 * 为一组复杂的子系统接口提供一个更高级的统一接口
 * 通过这个接口使得子系统接口的访问更容易。在Javascrip中有时也会用于对底层结构兼容性做统一封装来简化用户使用
 */

// 案例---使用外观封装一个点击事件,使其兼容IE浏览器和常用的浏览器,即兼容性封装
// 外观模式实现
function addEvent(dom, tyoe, fn) {
    // 对于支持DOM2级事件处理程序addEventListener 方法的浏览器
    if(dom.addEventListener) {
        dom.addEventListener(type, fn, false);
        // 对于不支持addEventListener方法但支持attachEvent 方法的浏览器
    } else if(dom.attachEvent) {
        dom.attachEvent('on' + type , fn);
        // 对于不支持addEventListener 方法也不支持attachEvent方法,但支持on + '事件名'的浏览器
    }else {
        dom['on' + type] = fn;
    }
}

// 通过上面的放我对于支持addEventListener 或者 attachEvent 方法的浏览器就可以放心地绑定多个事件了
// 用例
var myInput = document.getElementById('myinput')
addEvent(myInput, 'click', function() {
    console.log('绑定第一个事件')
})
addEvent(myInput, 'click', function() {
    console.log('绑定第二个事件')
})
addEvent(myInput, 'click', function() {
    console.log('绑定第三个事件')
})

// 使用外观模式解决IE 低版本浏览器不兼容e.preventDefault() 和 e.target 
// 获取事件对象
var getEvent = function(event) {
    // 标准浏览器返回event ,IE下 window.event
    return event || window.event;
}
// 获取元素
var getTarget = function (event) {
    var event = getEvent(event);
    // 标准浏览器下 event.target , IE 下event.scrElement 
    return event.target || event.srcElement;
} 

// 阻止默认行为
var preventDefault = function(event) {
    var event = getEvent(event);
    // 标准浏览器
    if(event.preventDefault) {
        event.preventDefault();
        // IE浏览器
    }else {
        event.returnValue = false
    }
}
// 用例
document.onclick = function (e) {
    // 阻止默认行为
    preventDefault(e);
    // 获取事件源目标对象
    if(getTarget(e) !== document.getElementById('myinput')) {
        // 
    }
}


// 简单实现获取元素的属性样式的简单方法库
var B = {
    // 通过ID获取元素
    g: function(id) {
        return document.getElementById(id);
    },
    // 设置元素css 属性
    css: function(id, key, value) {
        document.getElementById(id).style[key] = value;
    },
    // 设置元素的属性
    attr: function(id, key, value) {
        document.getElementById(id)[key] = value;
    },
    html: function(id, html){
        document.getElementById(id).innerHTML = html;
    },
    // 为元素绑定事件
    on: function(id, type, fn) {
        document.getElementById(id)['on' + type] = fn;
    }
}

// 上面封装了操作元素属性样式的代码库
// 用例如下
B.css('box', 'background', 'red'); // 设置css样式
B.attr('box', 'className', 'box') // 设置class 
B.html('box', '这是新添加的内容') // 设置内容
B.on('box', 'click', function() {
    B.css('box', 'width', '500px')
})


/**
 * 总结:
 * 外观模式是对接口方法的外层包装,以供上层代码调用
 */

相关文章

  • javascript设计模式——外观模式

    摘要:外观模式是对接口方法的外层包装,以供上层代码调用。例如浏览器事件绑定,因为不同浏览器实现的不一致,我们可以通...

  • JavaScript设计模式——外观模式

    外观模式 接下来,开始学习结构性设计模式 为一组复杂的子系统接口提供一个更高级的统一接口,通过这个接口使得对子系统...

  • 九、JavaScript 外观模式

    外观模式 当我们提出一个门面,我们要向这个世界展现的是一个外观,这一外观可能藏匿着一种非常与众不同的真实。这就是我...

  • 结构型模式:外观模式

    文章首发:结构型模式:外观模式 七大结构型模式之五:外观模式。 简介 姓名 :外观模式 英文名 :Facade P...

  • JavaScript设计模式之外观模式

    介绍 为子系统中的一组接口提供了一个高层接口 使用者使用这个高层接口 原来的系统中用户对接每一个子系统 使用外观模...

  • [记录]我的设计模式学习路径

    书单 《JavaScript 设计模式与开发实践》《设计模式之美》《掘金小册-JavaScript 设计模式核⼼原...

  • JavaScript设计模式 | 09-外观模式

    1、模式定义 外观模式,为一组复杂的子系统接口提供一个更加高级的统一接口。通过这个高级的接口,使得对子系统接口的访...

  • 设计模式之 外观模式

    概述 UML类图 代码栗子 总结 概述概念 外观模式又叫做门面模式,提供一个更方便,高层接口,使用一致性的界面使得...

  • 9.第三篇:结构型设计模式

    本文摘自 《JavaScript 设计模式》张容铭 著 版权归原作者所有 外观模式 在对页面dom绑定原生点击事件...

  • 第4章 结构型模式-外观模式

    一、外观模式的简介 二、外观模式的优缺点 三、外观模式的场景 四、外观模式的实例

网友评论

      本文标题:javascript之外观模式 -- 2022-11-20

      本文链接:https://www.haomeiwen.com/subject/tqtbxdtx.html