Fork me on github

以选项卡的故事扯扯js面向对象

在现在的网页中,选项卡(我自己这样子叫)是非常普遍的,也是比较基础,学了原型实现选项卡也挺久了,最近在学ES6,学了用类实现选项卡,今天就在此做个总结,别的废话也不多说。

以“貌”说这货

外貌——还好,长得挺帅

1
2
(自己理解的)选项卡:就是通过点击头部切换内容的货。

怎么得到这货

html代码

<div id="div1">
        <input type="button" value="出国" class="active">
        <input type="button" value="留学">
        <input type="button" value="旅游">
        <div style='display: block'>123</div>
        <div>456</div>
        <div>789</div>
    </div> 

css代码

#div1 div{
            width: 200px;
            height: 200px;
            border: 1px solid #ccc;
            display: none;
        }
        .active {
            background: orange;
        }

js代码

入门

window.onload=function ()
{
	var oDiv=document.getElementById('div1');
	var aBtn=oDiv.getElementsByTagName('input');
	var aDiv=oDiv.getElementsByTagName('div');
	
	for(var i=0;i<aBtn.length;i++)
	{
		aBtn[i].index=i;
		aBtn[i].onclick=function ()
		{
			for(var i=0;i<aBtn.length;i++)
			{
				aBtn[i].className='';
				aDiv[i].style.display='none';
			}
			this.className='active';
			//alert(this.index);
			aDiv[this.index].style.display='block';
		};
	}
};

面向对象

 window.onload = function (){
                new tab('div1');
            }

用原型实现

function tab(id)
{
    var oDiv = document.getElementById(id);
    this.aBtn = oDiv.getElementsTagName('input');
    this.aDiv = oDiv.getElemetsTagName('div');

    var _this = this;
    for(var i=0;i<this.aBtn.length;i++){
        this.aBtn[i].index = i;
        this.aDiv[i].addEventListener('click',function(){
            _this.tabSwitch(this);
        },false)
    }
}

tab.prototype.tabSwitch = function (oBtn){
    for(var i=0;i<this.aBtn.length;i++)
    {
        this.aBtn[i].className = '';
        this.aDiv[i].style.display = 'none';
    }
    oBtn.className = 'avtive';
    this.aDiv[oBtn.index].style.display = 'block';
}

用ES6引进的类class实现

class tab {
                constructor(id) {
                   var oDiv = document.getElementById(id);
                    this.aBtn = oDiv.getElementsByTagName('input');
                    this.aDiv = oDiv.getElementsByTagName('div');

                    var _this = this;
                    for (var i = 0; i < this.aBtn.length; i++) {
                        this.aBtn[i].index = i;
                        this.aBtn[i].addEventListener('click', function () {
                            _this.tabSwitch(this);
                        }, false)
                    } 
                }
                tabSwitch(oBtn) {
                    for (var i = 0; i < this.aBtn.length; i++) {
                        this.aBtn[i].className = '';
                        this.aDiv[i].style.display = 'none';
                    }
                    oBtn.className = 'active';
                    this.aDiv[oBtn.index].style.display = 'block';
                }    
            }

关于面向对象(自己的理解)

1.何为对象?
对象,就是拥有属性和方法的集合。
2.何为面向对象?
根据面向对象的三大特征:
多态:多种状态;
封装:把功能封装成工具,不用过多的理会怎么实现的,会使用就行;
继承:跟css继承性类似,继承父的属性和方法。
3.js里的面对对象与Java中的面对对象的区别
js是基于原型的面对对象,而Java是类的面向对象
4.怎么理解js里的原型?
原型可以用css里class去类似理解,就是一组元素通过原型实现相同属性、方法的。
5.
用原型写面向对象

function User(name, pass)
    {
        this.name=name;
        this.pass=pass;
    };
    
    User.prototype.showName=function()
    {
        alert(this.name);
    }
    User.prototype.showPass=function(){
        alert(this.pass);
    }

    function VipUser(name, pass, level){
        User.call(this, name, pass);

        this.level = level;
    }
    VipUser.prototype=new User();
    VipUser.prototype.constructor=VipUser;
    /*for(var i in User.prototype)
    {
        VipUser[i].prototype = User[i].prototype;
    }*/
    VipUser.prototype.showLevel=function(){
        alert(this.level);
    };

用类写面向对象

class person
{
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
    showName(){
        alert(this.name);
    }
    showAge(){
        alert(this.age);
    }
}
class vip extends person
{
    constructor(name,age,sex) {
        super(name, age);
        this.sex = sex;
    }
    showSex(){
        alert(this.sex);
    }
}
posted @ 2018-06-09 23:46  Zenquan  阅读(205)  评论(0编辑  收藏  举报