zoukankan      html  css  js  c++  java
  • 以选项卡的故事扯扯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{
                 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);
        }
    }
    
  • 相关阅读:
    【ThreadX】Azure RTOS ThreadX概述
    -- spi flash 擦除接口调用HAL库不同函数的区别
    STM32 芯片锁死解决方法
    【KEIL】User's Guide
    【KEIL】Software Packs
    【KEIL 】Options for File
    使用CubeMX创建TouchGFX工程时LCD死活不显示
    【转】获取本地图片的URL
    printf 函数格式控制
    【集成】touchgfx 之 《Using C code with TouchGFX》
  • 原文地址:https://www.cnblogs.com/Jomsou/p/9161803.html
Copyright © 2011-2022 走看看