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';    
    };    

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

  • 相关阅读:
    Android 编程下 Eclipse 恢复被删除的文件
    Android 编程下背景图片适配工具类
    Android 编程下 Managing Your App's Memory
    Android 编程下代码之(QQ消息列表滑动删除)
    Android 编程下 Canvas and Drawables
    Android 编程下 AlarmManager
    Android 编程下去除 ListView 上下边界蓝色或黄色阴影
    Java 编程下字符串的 16 位、32位 MD5 加密
    C#枚举类型和int类型相互转换
    MVC和普通三层架构的区别
  • 原文地址:https://www.cnblogs.com/bbcfive/p/10094837.html
Copyright © 2011-2022 走看看