JavaScript知识梳理 -从面向过程到面向对象(四)

面向对象案例

1.选项卡切换案例

1.1.css样式

1.1.html结构
<div class="box">
    <ul class="tits ">
        <li class="titsShow">音乐</li>
        <li>新闻</li>
        <li>娱乐</li>
        <li>电影</li>
    </ul>
    <ul class="content">
        <li class="contentShow">音乐</li>
        <li>新闻</li>
        <li>娱乐</li>
        <li>电影</li>
    </ul>
</div>
1.3.javaScript代码
//1.面向过程的方法去写
<script>
    //获取元素
    var tits = document.querySelectorAll('.tits li');
    var cons = document.querySelectorAll('.content li');
    var prevIndex = 0;
    //给元素添加绑定事件
    for(var i = 0;i < tits.length;i++){
     
        tits[i].index=i;
        tits[i].onclick=function(){
     
            console.log('我被点击了')
            //给上一个元素清除leiming
            tits[prevIndex].className="";
            cons[prevIndex].className="";
            //给元素添加类名
            tits[this.index].className="titsShow";
            cons[this.index].className="contentShow";
            //更新全局的prevIndex
            prevIndex = this.index;
        }
    }
</script>
//2.面向对象的方法去写
把变量变成对象的属性,此时tish指向对象,对象上的原型上方法只有对象的实例才能调用,也就是说,原型方法上的this指向调用者。
(function(){
     
    //写一个切换函数
    function Tab (tits,cons){
     
        this.tits = tits;
        this.cons = cons;
        this.prevIndex = 0;
    }
    //写一个切换类名的函数
    Tab.prototype.setClass=function(dom,oClass){
     
        dom.className=oClass;
    }
    //事件处理机制
    Tab.prototype.bindEvent=function(){
     
        var _this=this;
        for(var i = 0;i<this.tits.length; i++){
     
            this.tits[i].index=i;
            this.tits[i].onclick =function(){
     
                _this.clickHandler(this.index) 
            }
        }
    }
    //点击事件
    Tab.prototype.clickHandler=function(index){
     
        //上次选中的元素的类名清空
        this.setClass(this.tits[this.prevIndex],'')
        this.setClass(this.cons[this.prevIndex],'')
        //给本次选中的元素添加类名
        this.setClass(this.tits[index],"titsShow");
        this.setClass(this.cons[index],"contentShow");
        //更新元素下标
        this.prevIndex=index;
    }
    //创建一个初始话函数,返回示例对象,方便链式调用
    Tab.prototype.init=function(){
     
        this.bindEvent()
        return  this
    }
    //创建一个工厂函数(创建实例化对象,不需要用户再new了)
    function factory (d,c){
     
        return new Tab(d,c).init()
    }
    window.$=factory;//对外暴露一个接口

})()
var tits = document.querySelectorAll('.tits li');
var cons = document.querySelectorAll('.content li');
$(tits,cons)

!!! 以上是DaXiong本人对前端知识的理解总结,如内容知识有错误可以留言修改。

!!!如果以上内容帮助到了你,点击一下赞或者收藏吧!

你可能感兴趣的:(JavaScript,javascript,css,html5)