以选项卡的故事扯扯js面向对象
在现在的网页中,选项卡(我自己这样子叫)是非常普遍的,也是比较基础,学了原型实现选项卡也挺久了,最近在学ES6,学了用类实现选项卡,今天就在此做个总结,别的废话也不多说。
以“貌”说这货
外貌——还好,长得挺帅
(自己理解的)选项卡:就是通过点击头部切换内容的货。
怎么得到这货
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{
width: 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);
}
}
以选项卡的故事扯扯js面向对象的更多相关文章
- 【面向对象】用大白话扯扯那"神奇"的面向对象编程思维(二)
前言: 上一章我们用大白话讲解了一下面向对象的编程思维,那么这一张我们来讲讲如何用面向对象来书写代码.终于到了激动人心的时刻了..... 传送门:https://www.cnblogs.com/sy1 ...
- js面向对象+一般方法的选项卡
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 原生js面向对象编程-选项卡(自动轮播)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 原生js面向对象编程-选项卡(点击)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 第十五节 JS面向对象实例及高级
实例:面向对象的选项卡 把面向过程的程序,改写成面向对象的形式 原则:不能有函数套函数,但可以有全局变量 过程: onload —— 改写成 构造函数,其中window.onload的功能是在页面加载 ...
- js面向对象、创建对象的工厂模式、构造函数模式、原型链模式
JS面向对象编程(转载) 什么是面向对象编程(OOP)?用对象的思想去写代码,就是面向对象编程. 面向对象编程的特点 抽象:抓住核心问题 封装:只能通过对象来访问方法 继承:从已有对象上继承出新的对象 ...
- ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...
- JS面向对象介绍
JS面向对象介绍 首先面向对象是什么?为什么要使用面向对象. 因为JavaScript对每个创建的对象都会自动设置一个原型(谷歌火狐中是proto),指向它的原型对象prototype,举个例子: f ...
- js 面向对象 动态添加标签
有点逻辑 上代码 thml布局 点击查看代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
随机推荐
- SAP FICO 凭证导入接口 数据xml格式
接口传入参数说明 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xm ...
- 框架源码系列十二:Mybatis源码之手写Mybatis
一.需求分析 1.Mybatis是什么? 一个半自动化的orm框架(Object Relation Mapping). 2.Mybatis完成什么工作? 在面向对象编程中,我们操作的都是对象,Myba ...
- 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)
一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...
- flume学习笔记——安装和使用
Flume是一个分布式.可靠.和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力. Flume是一 ...
- Oracle 如何对中文字段进行排序
Oracle 如何对中文字段进行排序 oracle中drop.delete和truncate的区别 oracle里的执行计划-查看
- STS中如何使用lombok
Lombok有什么用使用Lombok时需要注意的点Lombok的安装spring boot集成LombokLombok常用注解@NonNull@Cleanup@Getter/@Setter@Gette ...
- java递归算法提前返回值带出
/** * */ package testJava.java.foreach; import java.util.ArrayList; import java.util.LinkedList; imp ...
- Qt中关于QMouseEventbuttons()和QMouseEventbutton()的使用注意
在进行QT程序开发中经常需要响应鼠标事件,在QWidget或QMainWindow的子类中可以重载如下鼠标事件实现自己需要的效果. virtual void mouseDoubleClickEvent ...
- Inside The C++ Object Model(五)
============================================================================5-0. 一般而言,class 的data me ...
- SublimeText插件Pandoc导出PDF中文报错或者中文不显示解决方法
按照如下自定义配置(主要是指定latex的字体[仅限本机字体]) { "user": { // "pandoc-path":"C:\\Program ...