面向过程—>面向对象

之前在未学习面向对象时,我们都是面向过程编程的。它的优点就是简单,明了,下面就来把面向过程的tabs切换改写成面向对象的方式。

html:

 <div class="tabs" id="tabs1">
         <ul class="tabs-nav">
             <li class="active"><a href="javascript:;">折扣</a></li>
             <li><a href="javascript:;">活动</a></li>
             <li><a href="javascript:;">优惠</a></li>
             <li><a href="javascript:;">其他</a></li>
         </ul>
         <div class="tabs-cnt">
             <div class="tabs-content">
                 11111111
             </div>
             <div class="tabs-content">
                 2222
             </div>
             <div class="tabs-content">
                 3333
             </div>
             <div class="tabs-content">
                 4444
             </div>
         </div>
     </div>

css:

;; list-style:none;}

.tabs{ margin:10px;}

.tabs-nav:before, .tabs-nav:after{ display:table; content:' ';}
.tabs-nav:after{ width:100%; clear:both; border-bottom:1px solid #47a3da;}
.tabs-nav li{ position:relative; float:left; margin-right:5px; border:1px solid #becbd2; border-bottom:none;}
.tabs-nav li.active:after{ position:absolute; bottom:-1px; width:100%; display:block; content:' '; border-bottom:1px solid #fff;}
.tabs-nav a{ display:block; padding:0 20px; line-height:30px; text-decoration:none; color:#000; font-size:14px;}

.tabs-cnt{ padding:10px;}
.tabs-content{ display:none;}
.tabs-content:first-child{ display:block;}

javascript:

 window.onload=function(){
     var oTabs=document.getElementById('tabs1');
     var aTabsNav=oTabs.querySelectorAll('.tabs-nav li');
     var aTabsCnt=oTabs.querySelectorAll('.tabs-content');

     for(var i=0;i<aTabsNav.length;i++){
         aTabsNav[i].index=i;
         aTabsNav[i].onclick=function(){
             for(var i=0;i<aTabsNav.length;i++){
                 aTabsNav[i].className='';
                 aTabsCnt[i].style.display='none';
             }
             this.className='active';
             aTabsCnt[this.index].style.display='block';
         };
     }
 };

效果:

改写成面向对象:

需要注意的几点:1.不能有函数嵌套 2.变量改为属性 3.函数改为方法 4.this的指向问题

 function tabSwitch(id){
     var _this=this;
     this.oTabs=document.getElementById(id);
     this.aTabsNav=this.oTabs.querySelectorAll('.tabs-nav li');
     this.aTabsCnt=this.oTabs.querySelectorAll('.tabs-content');

     for(var i=0;i<this.aTabsNav.length;i++){
         this.aTabsNav[i].index=i;
         this.aTabsNav[i].onclick=function(){
             _this.tab(this);
         };
     }
 }

 tabSwitch.prototype.tab=function(oTabsNav){
     for(var i=0;i<this.aTabsNav.length;i++){
         this.aTabsNav[i].className='';
         this.aTabsCnt[i].style.display='none';
     }
     oTabsNav.className='active';
     this.aTabsCnt[oTabsNav.index].style.display='block';
 };

 new tabSwitch('tabs1');

javascript面向对象——tabs实例的更多相关文章

  1. javaScript 面向对象开发实例

    javaScript 面向对象开发实例 这个是结合require的模块化开发,首先创建构造函数: //test.js 1 function Test(lists) { var config={ nam ...

  2. JavaScript面向对象 实例与原型

    JavaScript 面向对象 和 C# 不太一样,js 的对象是继承自原型的如下: 首先创建一个 js 实例 new  function function f () {} 这个函数 会继承 Func ...

  3. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  4. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  5. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

  6. javascript面向对象系列第一篇——构造函数和原型对象

    × 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...

  7. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

  8. 【转】javascript面向对象编程

    摘要:本文本来是想自己写的,奈何花了好长时间写好之后忘记保存,还按了刷新键,一键回到解放前,索性不写了,所以本文是转载的. 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化. ...

  9. javascript面向对象(一):封装

    本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...

随机推荐

  1. 属性"XmlFileName"的代码生成失败

    属性"XmlFileName"的代码生成失败.错误是:"未将对象引用设置到对象实例" 解决:   控件修改造成,关闭打开页面,重新生成

  2. C文件操作(转载)

    /*1.文件的打开(fopen函数)fopen函数用来打开一个文件,其调用的一般形式为:文件指针=fopen(文件名,文件操作方式):例如:FILE *fpinfpin=fopen("c:\ ...

  3. 微软的MCE(Media Center Edition 媒体中心)标准

    Windows VISTA和Windows 7操作系统上,电脑遥控器01RN的强劲功能更是发挥得淋漓尽致,不仅可以单凭遥控器一键即实现“听歌.看碟.播放控制.曲目选择.照片欣赏.幻灯片播放.网络电影电 ...

  4. 在C#中调用API获取网络信息和流量

    原文 在C#中调用API获取网络信息和流量 最近一项目中要求显示网络流量,而且必须使用C#. 事实上,调用 IpHlpApi.dll 的 GetIfTable API 可以轻易获得网络信息和网络流量. ...

  5. 配置hibernate数据库连接

    第一步:右键项目->MyEclipse->添加Hibernate组件,指定数据库连接配置如下(src/hibernate.cfg.xml) MySQL对连接的有效期是28800s,一个连接 ...

  6. 非常可乐(bfs)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. Memory Architecture-SGA-Database Buffer Cache

    启动instance:1.分配内存空间SGA 2.启动后台进程 内存结构:1.SGA 2.PGA 3.UGA 4.Software code areas SGA components:1.Databa ...

  8. 【转】利用Ajax.BeginForm提交文件

    Ajax.BeginForm @using (Ajax.BeginForm("YourAction", "YourController", new AjaxOp ...

  9. Json在asp.net开发中的应用

    一.asp.net后台返回Json数据,前台js解析 在后台读取数据,并手动封装成Json格式: public ContentResult getUsersByOrgId(int Id) { Data ...

  10. CentOS7 安装JDK

    链接地址:http://jingyan.baidu.com/article/c74d60007b85510f6a595dfa.html VMware 10 centos 安装jdk 及mysql 方法 ...