js es6系列教程 - 新的类语法实战选项卡(详解)


Posted in Javascript onSeptember 02, 2017

其实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();
  }

以上这篇js es6系列教程 - 新的类语法实战选项卡(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript OOP类与继承
Nov 15 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
Sep 12 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
Mvc提交表单的四种方法全程详解
Aug 10 Javascript
js实现tab切换效果
Feb 16 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
seajs模块压缩问题与解决方法实例分析
Oct 10 Javascript
webstrom Debug 调试vue项目的方法步骤
Jul 17 Javascript
使用zrender.js绘制体温单效果
Oct 31 Javascript
video.js添加自定义组件的方法
Dec 09 Javascript
使用vue-resource进行数据交互的实例
Sep 02 #Javascript
jquery tmpl模板(实例讲解)
Sep 02 #jQuery
自制简易打赏功能的实例
Sep 02 #Javascript
Vue使用vue-cli创建项目
Sep 01 #Javascript
vue 里面使用axios 和封装的示例代码
Sep 01 #Javascript
ionic2懒加载配置详解
Sep 01 #Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 #Javascript
You might like
PHP Document 代码注释规范
2009/04/13 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
用js遍历 table的脚本
2008/07/23 Javascript
JavaScript delete操作符应用实例
2009/01/13 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python 阶乘累加和的实例
2019/02/01 Python
Python各种扩展名区别点整理
2020/02/27 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
幼教个人求职信范文
2013/12/02 职场文书
求职教师自荐书
2014/06/19 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
硕士学位论文评语
2014/12/31 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
js 实现验证码输入框示例详解
2022/09/23 Javascript