面向过程—>面向对象

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

html:

  1. <div class="tabs" id="tabs1">
  2. <ul class="tabs-nav">
  3. <li class="active"><a href="javascript:;">折扣</a></li>
  4. <li><a href="javascript:;">活动</a></li>
  5. <li><a href="javascript:;">优惠</a></li>
  6. <li><a href="javascript:;">其他</a></li>
  7. </ul>
  8. <div class="tabs-cnt">
  9. <div class="tabs-content">
  10. 11111111
  11. </div>
  12. <div class="tabs-content">
  13. 2222
  14. </div>
  15. <div class="tabs-content">
  16. 3333
  17. </div>
  18. <div class="tabs-content">
  19. 4444
  20. </div>
  21. </div>
  22. </div>

css:

  1. ;; list-style:none;}
  2.  
  3. .tabs{ margin:10px;}
  4.  
  5. .tabs-nav:before, .tabs-nav:after{ display:table; content:' ';}
  6. .tabs-nav:after{ width:100%; clear:both; border-bottom:1px solid #47a3da;}
  7. .tabs-nav li{ position:relative; float:left; margin-right:5px; border:1px solid #becbd2; border-bottom:none;}
  8. .tabs-nav li.active:after{ position:absolute; bottom:-1px; width:100%; display:block; content:' '; border-bottom:1px solid #fff;}
  9. .tabs-nav a{ display:block; padding:0 20px; line-height:30px; text-decoration:none; color:#000; font-size:14px;}
  10.  
  11. .tabs-cnt{ padding:10px;}
  12. .tabs-content{ display:none;}
  13. .tabs-content:first-child{ display:block;}

javascript:

  1. window.onload=function(){
  2. var oTabs=document.getElementById('tabs1');
  3. var aTabsNav=oTabs.querySelectorAll('.tabs-nav li');
  4. var aTabsCnt=oTabs.querySelectorAll('.tabs-content');
  5.  
  6. for(var i=0;i<aTabsNav.length;i++){
  7. aTabsNav[i].index=i;
  8. aTabsNav[i].onclick=function(){
  9. for(var i=0;i<aTabsNav.length;i++){
  10. aTabsNav[i].className='';
  11. aTabsCnt[i].style.display='none';
  12. }
  13. this.className='active';
  14. aTabsCnt[this.index].style.display='block';
  15. };
  16. }
  17. };

效果:

改写成面向对象:

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

  1. function tabSwitch(id){
  2. var _this=this;
  3. this.oTabs=document.getElementById(id);
  4. this.aTabsNav=this.oTabs.querySelectorAll('.tabs-nav li');
  5. this.aTabsCnt=this.oTabs.querySelectorAll('.tabs-content');
  6.  
  7. for(var i=0;i<this.aTabsNav.length;i++){
  8. this.aTabsNav[i].index=i;
  9. this.aTabsNav[i].onclick=function(){
  10. _this.tab(this);
  11. };
  12. }
  13. }
  14.  
  15. tabSwitch.prototype.tab=function(oTabsNav){
  16. for(var i=0;i<this.aTabsNav.length;i++){
  17. this.aTabsNav[i].className='';
  18. this.aTabsCnt[i].style.display='none';
  19. }
  20. oTabsNav.className='active';
  21. this.aTabsCnt[oTabsNav.index].style.display='block';
  22. };
  23.  
  24. 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. PHP创建定义数组

    $array = array();      $array["key"] = "values";  ?> 在PHP中声明数组的方式主要有两种:1.用arr ...

  2. 在IT公司,project manager 基本上和秘书,助理什么的差不多

    我感觉非常有道理,所以我不做Leader,哈哈哈

  3. dump文件定位程序崩溃代码行

    1.dump文件 2.程序对应的pdb 步骤一:安装windbg 步骤二:通过windbg打开crash dump文件 步骤三:设置pdb文件路径,即符号表路径 步骤四:运行命令!analyze -v ...

  4. readv和writev函数

    readv 和 writev 函数用于在一次函数调用中读.写多个非连续缓冲区.有时也将这两个函数称为散布读和聚集写. #include <sys/uio.h> ssize_t readv( ...

  5. hdu4300之KMP&&EKMP

    Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  6. linux命令 收集

    https://jaywcjlove.github.io/linux-command/ 源码:https://github.com/jaywcjlove/linux-command Linux思维导图 ...

  7. jz2440: linux/arch/arm/下面的plat-和mach-

    jz2440: linux/arch/arm/下面的plat和mach plat-s3c24xxmach-s3c2440mach-s3c2410 ====================== 1. 三 ...

  8. hdu 4782 Beautiful Soupz

    模拟.其实这题就是题目比较长而已...读完题目就差不多了.tag直接读就可以了,题目说了不用修改.然后整个题目就是让求text部分,严格按空格分开.注意每行前面空格个数. #include<al ...

  9. C#线程应用实例(part1) 之 BeginInvoke和EndInvoke

    最近这个公司是做 winfrom 开发的 , 这段时间就好好的学学WCF , 公司框架什么的自己去琢磨! 这里主要写一些 winfrom 中 用到的一些陌生 技术 1.BeginInvoke  以前B ...

  10. sqm(sqlmapGUI) pcat修改版

    sqlmap是一款开源的注入工具,支持几乎所有的数据库,支持get/post/cookie注入,支持错误回显注入/盲注,还有其他多种注入方法. 支持代理,指纹识别技术判断数据库 .而sqm(sqlma ...