美文网首页
JS封装功能方式Class&混合模式

JS封装功能方式Class&混合模式

作者: Gino_Li | 来源:发表于2019-03-01 20:14 被阅读0次

两种方式封装,第一种是自定义对象里的混合模式(原型模式和构造函数模式结合),第二种是CLASS类定义对象。

以封装选项卡功能为例

👇HTML和CSS部分

    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        
        #tab {
            width: 500px;
            height: 500px;
            border: 1px solid black;
            margin: 0 auto;
            text-align: center;
        }
        
        #tab .btns {
            display: flex;
            justify-content: space-between;
            text-align: center;
        }
        
        .btns li {
            width: 33%;
            height: 80px;
            line-height: 80px;
            background: black;
            color: white;
            cursor: pointer;
        }
        
        .btns li:hover {
            opacity: 0.3;
        }
        
        .content {
            margin-top: 50px;
            font-size: 40px;
        }
        
        .content li:not(:first-of-type) {
            display: none;
        }
    </style>

    <body>
        <div id="tab">
            <ul class="btns">
                <li>首页</li>
                <li>新闻</li>
                <li>关于我们</li>
            </ul>
            <ul class="content">
                <li>我是首页内容</li>
                <li>我是新闻内容</li>
                <li>我是关于我们内容</li>
            </ul>
        </div>
        </body>

混合模式

            function Tab(el){
                //获取到选项卡最大的容器
                this.el=document.querySelector(el);
                //获取所有按钮
                this.btns= this.el.querySelector('.btns').children;
                //获取内容
                this.content = this.el.querySelector('.content').children;
            }
            Tab.prototype.init=function(){
                var leng = this.btns.length;
                var that = this;
                for(var i=0;i<leng;i++){
                    this.btns[i].index=i;
                    this.btns[i].addEventListener('click',function(){
                        for(var j=0;j<leng;j++){
                            that.content[j].style.display='none';
                        }
                        that.content[this.index].style.display='block';
                    })
                }
            }
            var tab = new Tab('#tab');
            tab.init();
            console.log(tab);

class定义对象(ES6语法,推荐!)

  • 优点:
    1、class 写法更加简洁、含义更加明确、代码结构更加清晰。
    2、class 尽管也是函数,却无法直接调用。
    3、class 不存在变量提升。
    4、class 为污染 window 等全局变量。
    5、class 函数体中的代码始终以严格模式执行
            class Tab{
                init(){
                    var leng = this.btns.length;
                    //因为下面的点击事件里的this会指向btns,所以要用that变量捕获this,让this指向实例化对象
                    var that = this;
                    //循环第一次获取到每个选项卡按钮
                    for(var i = 0; i < leng; i++) {
                        //储存btns的下标值
                        this.btns[i].index = i;
                        //添加点击事件
                        this.btns[i].addEventListener('click', function() {
                            //循环第二次获取到每个选项卡内容
                            for(var j = 0; j < leng; j++) {
                                //将所有内容的display设置为none
                                that.content[j].style.display = 'none';
                            }
                            //根据上面获取到选项卡按钮下标值显示相应的内容
                            that.content[this.index].style.display = 'block';
                        })
                    }
                }
            }
            class Tabchild extends Tab{
                constructor(el){
                    super();
                    //获取最大的盒子
                    this.el = document.querySelector(el);
                    //获取按钮,.btns是按钮的爸爸,加上.children就是指向按钮
                    this.btns = this.el.querySelector('.btns').children;
                    //获取内容
                    this.content = this.el.querySelector('.content').children;
                }
            }
            var tab = new Tabchild('#tab');
            tab.init();
            

相关文章

  • JS封装功能方式Class&混合模式

    两种方式封装,第一种是自定义对象里的混合模式(原型模式和构造函数模式结合),第二种是CLASS类定义对象。 以封装...

  • SwiftUI:特殊效果 - 模糊,混合模式,饱和度调整等

    SwiftUI使我们能够出色地控制视图的呈现方式,包括应用实时模糊,混合模式,饱和度调整等功能。 混合模式使我们可...

  • 设计模式

    构造函数模式 利用原型继承的方式创建对象,以实现功能 混合模式 本质上也是利用原型继承的方式创建对象,但更加具象了...

  • 前端设计模式

    模块模式 工厂模式 构造函数模式 混合模式 单例模式 发布订阅模式 模块模式 用于模块封装,用立即执行的函数嵌套一...

  • 前端设计模式

    写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。 基本上都是通过IIFE来封装代码...

  • 2020-03-05 TDDP 插件笔记

    TDDP_PictureBlendModes.js 可以调整图片的混合模式 TDDP_ManageDashing....

  • 常用js功能封装

    计算相同数组个数 多维数组根据对象进行排序

  • js常见设计模式

    1.写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。 JS设计模式大全 构造函数模...

  • 前端设计模式

    模块模式 用于简单的封装,只暴露出几个接口 构造函数模式 较复杂的组件 混合模式 工厂模式 用于:简单的创建对象 ...

  • Webview里面的js如何访问的后台

    Android代码 node server.js demo.html 这种常见的混合模式App开发中,js并不能访...

网友评论

      本文标题:JS封装功能方式Class&混合模式

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