以选项卡的故事扯扯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面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
随机推荐
- 2.静态AOP实现-装饰器模式
通过装饰器模式实现在RegUser()方法本身业务前后加上一些自己的功能,如:BeforeProceed和AfterProceed,即不修改UserProcessor类又能增加新功能 定义1个用户接口 ...
- Android手机用wifi连接adb调试的方法
https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点 ...
- [python] python3.6 安装 pytesseract 出错
安装pytesseact出错, 下载 tesseract-ocr , 地址 https://github.com/tesseract-ocr/tesseract 修改pytesseract.py 设置 ...
- pycharm 2018.1 激活
pycharm 2018.1 License server 填入 https://jetlicense.nss.im/ 激活没有问题 测试时间 2018.4.18
- mysql导出长数字到excel避免显示为科学记数法 解决方法
经常遇到MYSQL导出长数字或纯数字字符串(如身份证.卡券号.条码.流水号等)到csv或excel文件,用excel打开会显示为科学记数法,甚至后几位转为0.这是由Excel的特性决定的:Excel显 ...
- poj1696
没看题解,搜了一下都是什么叉积凸包,根本没有必要用吧.. 显然这个题我们找夹角就可以了,根据高中的公式 a·b=|a|*|b|*cos<a,b> 所以用点积找一个 cos<a,b&g ...
- mybatis14--注解的配置
去掉对应的mapper映射文件 在dao文件中增加注解 public interface StudentDao { /** * 新增学生信息 */ @Insert(value="insert ...
- python 中字符串的格式化
# 字符串格式化name = input("name:")age = int(input("age:"))job = input("job:" ...
- Python学习之旅(三十六)
Python基础知识(35):电子邮件(Ⅱ) 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上 收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3 Pytho ...
- /编写一个函数,要求从给定的向量A中删除元素值在x到y之间的所有元素(向量要求各个元素之间不能有间断), 函数原型为int del(int A ,int n , int x , int y),其中n为输入向量的维数,返回值为删除元素后的维数
/** * @author:(LiberHome) * @date:Created in 2019/2/28 19:39 * @description: * @version:$ */ /* 编写一个 ...