js设计模式之实现观察者模式实例代码

前端界面

html代码

<body>
    <select name="" id="select">
        <option value="">请选择风格</option>
        <option value="male">男式风格</option>
        <option value="female">女士风格</option>
    </select>
    <button onclick="t1();">观察学习区</button>
    <button onclick="t2();">不观察学习区</button>
    <div id="content">内容区</div>
    <div id="ad">广告区</div>
    <div id="study">学习区</div>
</body>

css样式

<style>
#content,#ad,#study{
    width: 498px;
    height: 150px;
    border:1px solid #333;
    margin-top: 10px;
}

</style>

js代码

<script>
    var sel = document.getElementById("select");
    // console.log(sel)
    sel.objs = {}
    sel.attach = function(key,obj){
        this.objs[key] = obj;
    }
    sel.delAttach = function(key){
        delete this.objs[key];
    }

    sel.onchange = function(){
        for(var key in this.objs){
            this.objs[key].update(this)
        }
    }

    // 客户端
    var content = document.getElementById(‘content‘)
    var ad = document.getElementById(‘ad‘)
    var study = document.getElementById(‘study‘)
    content.update = function(objs){
        if (objs.value == ‘male‘) {
            content.style.backgroundColor = "blue";
        }else if (objs.value == ‘female‘) {
            content.style.backgroundColor = "pink";
        }else{
            content.style.backgroundColor = "";
        }
    }
    ad.update = function(objs){
        if (objs.value == ‘male‘) {
            ad.innerHTML = "汽车";
        }else if (objs.value == ‘female‘) {
            ad.innerHTML = "减肥";
        }else{
            ad.innerHTML = "广告区";
        }
    }
    study.update = function(objs){
        if (objs.value == ‘male‘) {
            study.innerHTML = "学习编程";
        }else if (objs.value == ‘female‘) {
            study.innerHTML = "学习美工";
        }else{
            study.innerHTML = "学习区";
        }
    }
    sel.attach(‘content‘,content);
    sel.attach(‘ad‘,ad);
    sel.attach(‘study‘,study);
    function t1(){
        sel.attach(‘study‘,study)
    }
    function t2(){
        sel.delAttach(‘study‘)
    }
</script>

原文地址:https://www.cnblogs.com/Mishell/p/12182010.html

时间: 2024-10-09 12:28:20

js设计模式之实现观察者模式实例代码的相关文章

js取滚动条的尺寸实例代码

分享一个js取滚动条的尺寸的函数代码,很简单,很实用. 创建一个嵌套节点,让外层节点产生滚动条,然后用offsetWidth - clientWidth即可获得滚动条宽度. 注意,为了避免页面抖动,可以设置外层元素position:absolute和visibility:hidden 完整代码: function getScrollWith(){ var wrap = setAttributes(document.createElement('div'),{ style : { width :

js数组元素由小到大排序实例代码

js数组元素由小到大排序实例代码:有时候需要对数组中的数字进行排序,下面是一段将数组中数字由小到大排序的代码实例,希望能够帮到大家.实例代码如下: var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98]; var len=arr.length; console.log(arr.join(",")); var newarr=[]; for(var i=0;i<len;i++){ newarr.push(Math.min.apply(nu

js的dom测试及实例代码

js的dom测试及实例代码 一.总结 一句话总结: 1.需要记得 创建 标签和创建文本节点都是document的活:document.createTextNode("Rockets的姚明"); 2.appendChild就是 标签 都可以干的活:document.body.appendChild(hr1); 1.需要记得 创建 标签和创建文本节点都是document的活? var div1 = document.createElement("div"); var t

【JS设计模式】策略模式的代码示例

策略模式的概念引用:        在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法:当然也可以将这些查找算法封装在一个统一的方法中,通过if-else-或者case等条件判断语句来进行选择.这两种实现方法我们都可以称之为硬编码,如

php设计模式之单例实例代码

<?php header("Content-type:text/html;charset=utf-8"); /** * 第一步,分别实例化 */ /*class Single { function __construct() { # code... } } $s1 = new Single(); $s2 = new Single(); if ($s1 === $s2) { echo "是同一个对象"; }else{ echo "不是同一个对象&quo

php设计模式之策略模式实例代码

html <html> <head> <meta charset="UTF-8"> <title>简单计算器</title> </head> <body> <h1>简单计算器</h1> <form action="10.php" method="post"> <input type="text" nam

php设计模式之桥接模式实例代码

<?php header("Content-type:text/html;charset=utf-8"); abstract class msg{ protected $send = null; public function __construct($send){ $this->send = $send; } abstract function msg($content); function send($to, $content){ $content = $this-&g

js实现的数字四舍五入效果代码实例

js实现的数字四舍五入效果代码实例:下面直接给出能够截取指定位数字符串,且具有四舍五入效果的代码: var num=3.1415926; console.log(num.toFixed(3)); toFixed()函数可以参阅javascript的Number对象的toFixed()方法一章节. 原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=11973 更多内容可以参阅:http://www.softwhy.com/javas

原生js实现的创建和删除元素实例代码

原生js实现的创建和删除元素实例代码:在实际应用中,往往需要动态的创建和删除指定的元素,下面就通过代码实例介绍一下如何实现此功能.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title&g