zoukankan      html  css  js  c++  java
  • 面向对象实例

    <!--把一个面向过程的程序,改成面向对象的形式-->

    一、一个基本的选项卡:

    <div id="div1">
        <input class="active" type="button" value="aaa" >
        <input type="button" value="bbb">
        <input type="button" value="ccc">
        <div style="display: block;">aaa</div>
        <div>bbb</div>
        <div>ccc</div>        
    </div>
    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';
                aDiv[this.index].style.display='block';    
            };
        }
    }

    二、面向对象的改造:

    1.原则
      不能有嵌套函数,但能有全局变量
    2.过程

    • onload -> 构造函数
    • 全局变量 -> 属性
    • 函数 -> 方法

    3.改错
      this,事件,闭包,传参
    4.对象与闭包
      通过闭包传递this

    window.onload = function () {
        new TabSwitch('div1');
    };
    
    function TabSwitch(id) {
        var _this = this;
        var oDiv = document.getElementById(id);
        this.aBtn = oDiv.getElementsByTagName('input');
        aDiv = oDiv.getElementsByTagName('div');
    
        for (var i = 0; i < this.aBtn.length; i++) {
            this.aBtn[i].index = i;
            //this.aBtn[i].onclick=this.fnClick; //fnclick不再是函数,而是方法
            this.aBtn[i].onclick = function () {
                _this.fnClick(this); //两个this的区别 
            };
        }
    }
    
    TabSwitch.prototype.fnClick = function(oBtn) {
         //alert(this); this->aBtn,49行,fnclick被赋值给了aBtn.onclik
         //如果想要this指新new来的对象,则使用50行代码
        for (var i = 0; i <this.aBtn.length;i++) {
            this.aBtn[i].className='';
            aDiv[i].style.display='none';
        }
        oBtn.className = 'active';
        aDiv[oBtn.index].style.display='block';    
    };    

    面向对象的实现相对恶心,在大型项目中才能体现其优势。

  • 相关阅读:
    c#语音报时(含完整的声音资源文件).rar
    SQL 查看数据库表的容量大小
    c# 鼠标在控件上拖动 移动窗体 移动窗口
    C# winform 右下角弹出窗口结果
    Qt通用方法及类库8
    Qt通用方法及类库7
    Qt通用方法及类库6
    Qt通用方法及类库5
    Qt通用方法及类库4
    Qt通用方法及类库3
  • 原文地址:https://www.cnblogs.com/bbcfive/p/10094837.html
Copyright © 2011-2022 走看看