面向过程与面向对象比较之tab选项卡切换

2017-01-25  本文已影响0人  JacobMa1996
<body>
    <div id="div">
        <input type="button" value="选项卡1" name="">
        <input type="button" value="选项卡2" name="">
        <input type="button" value="选项卡3" name="">
        <div>111</div>
        <div>222</div>
        <div>333</div>
    </div>
</body>
<script type="text/javascript">
    //面向过程的选项卡切换(用循环而不用每个元素设置id)
    window.onload = function(){
        var div = document.getElementById("div");
        var btn = div.getElementsByTagName("input");
        // alert(btn.length);
        var content = div.getElementsByTagName("div");
        for(var i = 0,Len = btn.length;i < Len;i++){
            // alert(btn[i]);
            //将每次加载DOM元素的onlcik事件时,把赋给btn的index属性
            btn[i].index = i;
            // console.log(i);
            btn[i].onclick = function(){
                for(var j = 0,Len2 = content.length;j < Len2;j++){
                    content[j].style.display = "none";
                }
                content[this.index].style = "blcok";
                //此时,i=3,因为已加载完三个onclick事件,所以当点击事件时,i=3;
                // console.log(i);
            };
        }
    };
    //面向对象写法:组合使用构造函数模式和原型模式
    function tabSwitch(id){
        this.div = document.getElementById(id),
        this.btn = div.getElementsByTagName("input"),
        this.content = div.getElementsByTagName("div");
        tabSwitch.prototype.tab = function(){
            for(var i = 0,Len = this.btn.length;i < Len;i++){
                this.btn[i].index = i;
                //在事件中,this指向执行此事件的对象,因此将原来指向新对象的this赋给_this
                _this = this;
                this.btn[i].onclick = function(){
                    for(var j = 0,Len2 = _this.content.length;j < Len2;j++){
                        _this.content[j].style.display = "none";
                        // console.log(_this);
                    }
                    _this.content[this.index].style = "block";
                }
            }
        }
        console.log(tabSwitch.prototype);//指向原型
        console.log(tabSwitch.prototype.constructor);//指向构造函数
    }
    window.onload = function(){
        var tab = new tabSwitch("div");
        tab.tab();
        console.log(tab.__proto__);//指向原型
    }
</script>

面向过程写法简单,但用起来不方便,面向对象写法效率高,用起来方便

上一篇下一篇

猜你喜欢

热点阅读