js es6系列教程 - 新的类语法实战选项卡(详解)
作者:jingxian 发布时间:2024-11-12 17:09:41
标签:js,es6,类语法
其实es6的面向对象很多原理和机制还是ES5的,只不过把语法改成类似php和java老牌后端语言中的面向对象语法.
一、用es6封装一个基本的类
class Person{
constructor( uName ){
this.userName = uName;
}
sayName(){
return this.userName;
}
}
是不是很向php和java中的类, 其实本质还是原型链,我们往下看就知道了
首先说下语法规则:
class Person中的Person就是类名,可以自定义
constructor就是构造函数,这个是关键字,当实例化对象的时候,这个构造函数会被自动调用
let oP = new Person( 'ghostwu' );
console.log( oP.sayName() ); //ghostwu
console.log( oP instanceof Person ); //true
console.log( oP instanceof Object ); //true
console.log( typeof Person ); //function
console.log( typeof Person.prototype.sayName ); //function
console.log( oP.__proto__ === Person.prototype ); //true
console.log( 'sayName' in oP ); //true
console.log( Person.prototype );
第1行和第2行实例化和调用方法还是跟es5一样
第4行和第5行判断对象是否是类(Person)和Object的实例, 结果跟es5一样, 这个时候,我们肯定会想到Person的本质是否就是一个函数呢
第7行完全验证了我们的想法,类Person本质就是一个函数
第8行可以看到sayName这个函数其实还是加在Person的原型对象上
第9行还是验证了es5的原型链特点:对象的隐式原型指向构造函数的原型对象
第10行验证oP对象通过原型链查找到sayName方法
这种类的语法,被叫做语法糖,本质还是原型链
二、利用基本的类用法,封装一个加法运算
class Operator{
constructor( n1 = 1, n2 = 2 ){
this.num1 = n1;
this.num2 = n2;
}
add( n1 = 10, n2 = 20 ){
let num1 = n1 || this.num1, num2 = n2 || this.num2;
return num1 + num2;
}
}
var oper = new Operator();
console.log( oper.add( 100, 200 ) );
三、利用基本的类语法,封装经典的选项卡
css代码:
#tab div {
width: 200px;
height: 200px;
border: 1px solid #000;
display: none;
}
#tab div:nth-of-type(1) {
display: block;
}
.active {
background: yellow;
}
html代码:
<div id="tab">
<input type="button" value="点我1" data-target="#div1" class="active">
<input type="button" value="点我2" data-target="#div2">
<input type="button" value="点我3" data-target="#div3">
<input type="button" value="点我4" data-target="#div4">
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
</div>
javascript代码:
window.onload = () => {
class Tab {
constructor( context ) {
let cxt = context || document;
this.aInput = cxt.querySelectorAll( "input" );
this.aDiv = cxt.querySelectorAll( "div" );
}
bindEvent(){
let targetId = null;
this.aInput.forEach(( ele, index )=>{
ele.addEventListener( "click", ()=>{
targetId = ele.dataset.target;
this.switchTab( ele, targetId );
});
});
}
switchTab( curBtn, curId ){
let oDiv = document.querySelector( curId );
this.aDiv.forEach(( ele, index )=>{
ele.style.display = 'none';
this.aInput[index].className = '';
});
curBtn.className = 'active';
oDiv.style.display = 'block';
}
}
new Tab( document.querySelector( "#tab" ) ).bindEvent();
}
来源:http://www.cnblogs.com/ghostwu/archive/2017/09/01/7465066.html


猜你喜欢
- 重试指的是当加载出错时,有能力重新发起加载组件的请求。异步组件加载失败后的重试机制,与请求服务端接口失败后的重试机制一样。所以,先来讨论接口
- SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可
- 代码如下:Set Catalog_object= Server.CreateObject("ADO
- 目录:1、脚本式开发.2、工程化开发3、工程化和脚本的区别4、来个table试试水4,1、目标4.2、思路4.3、设计与编码4.4、效果5、
- 也许光从字面上来说,版式设计中的“亲密性”似乎不太好理解,正常的情况下,我们都会把“亲密性”理解为人与人之间的关系的一种表现,事实上在版式设
- SQL Server 数据库定时自动备份,供大家参考,具体内容如下在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库。而备
- 一、前言在Python开发的过程中,为了实现某项功能,经常需要对某些字符串进行特殊的处理,如拼接字符串、截取字符串、格式化字符串等。下面将对
- 在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的
- CentOS6.9+Mysql5.7.18源码安装,以下操作均在root用户下执行。1、安装依赖工具cmake make3.75+ gcc4
- 前言本文主要给大家介绍的关于Python批量压缩png的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:1.需求为什
- 最近一直跟着廖大在学Python,关于分布式进程的小例子挺有趣的,这里做个记录。分布式进程Python的multiprocessing模块不
- 本文实例讲述了PHP队列用法。分享给大家供大家参考。具体分析如下:什么是队列,是先进先出的线性表,在具体应用中通常用链表或者数组来实现,队列
- 在Python中有两个函数分别是startswith()函数与endswith()函数,功能都十分相似,startswith()函数判断文本
- 本文实例讲述了python自动化之Ansible的安装。分享给大家供大家参考,具体如下:一 点睛Ansible只需在管理端部署环境即可,建议
- ASP在线压缩ACCESS数据库原理很简单:利用JRO.JetEngine的压缩功能建立一个新的数据库文件,然后把原来的删掉、替换!既然这样
- 前言引用一张比较清晰易懂的图php伪协议是php自己支持的一种协议与封装协议,简单来说就是php定义的一种特殊访问资源的方法。常见的php伪
- 在thoughtbot,我们用Ruby和Rails工作,但通常我们总是尝试使用最合适的语言或者框架来解决问题。我最近一直在探索机器学习技术,
- python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手。python爬虫微博根据微博存在于不同媒介上,
- PyCharm 的官方网站地址是:https://www.jetbrains.com/pycharm/01. 恢复 PyCharm 的初始设
- 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能。微信商城中,使用微信支付获取用户的收货地址,可以省略用户输入